summaryrefslogtreecommitdiffstats
path: root/src/host/layer23/src
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2010-03-27 08:56:05 +0800
committerHarald Welte <laforge@gnumonks.org>2010-03-27 08:56:05 +0800
commite8a7bbffd2178c318903b69c41da26bfd7e9855e (patch)
tree0b877d1929cdcf80deb80c95f09ea695b9ae1b94 /src/host/layer23/src
parent7aac0b828df05299abdf75f5a5fc959c3aa91165 (diff)
layer23: convert to libosmocore logging API
Diffstat (limited to 'src/host/layer23/src')
-rw-r--r--src/host/layer23/src/Makefile.am3
-rw-r--r--src/host/layer23/src/l1ctl.c36
-rw-r--r--src/host/layer23/src/lapdm.c87
-rw-r--r--src/host/layer23/src/layer3.c17
-rw-r--r--src/host/layer23/src/logging.c87
-rw-r--r--src/host/layer23/src/main.c15
-rw-r--r--src/host/layer23/src/rslms.c21
7 files changed, 196 insertions, 70 deletions
diff --git a/src/host/layer23/src/Makefile.am b/src/host/layer23/src/Makefile.am
index 0dd22032..ae867faf 100644
--- a/src/host/layer23/src/Makefile.am
+++ b/src/host/layer23/src/Makefile.am
@@ -2,5 +2,6 @@ INCLUDES = $(all_includes) -I$(top_srcdir)/include
AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS)
sbin_PROGRAMS = layer23
-layer23_SOURCES = main.c l1ctl.c gsmtap_util.c lapdm.c rslms.c layer3.c
+layer23_SOURCES = main.c l1ctl.c gsmtap_util.c lapdm.c rslms.c \
+ layer3.c logging.c
layer23_LDADD = $(LIBOSMOCORE_LIBS)
diff --git a/src/host/layer23/src/l1ctl.c b/src/host/layer23/src/l1ctl.c
index eaff7a12..2e6e8e07 100644
--- a/src/host/layer23/src/l1ctl.c
+++ b/src/host/layer23/src/l1ctl.c
@@ -42,6 +42,7 @@
#include <osmocom/l1ctl.h>
#include <osmocom/osmocom_data.h>
#include <osmocom/lapdm.h>
+#include <osmocom/logging.h>
#include <osmocom/gsmtap_util.h>
static struct msgb *osmo_l1_alloc(uint8_t msg_type)
@@ -50,7 +51,7 @@ static struct msgb *osmo_l1_alloc(uint8_t msg_type)
struct msgb *msg = msgb_alloc_headroom(256, 4, "osmo_l1");
if (!msg) {
- fprintf(stderr, "Failed to allocate memory.\n");
+ LOGP(DL1C, LOGL_ERROR, "Failed to allocate memory.\n");
return NULL;
}
@@ -75,7 +76,8 @@ static int rx_l1_ccch_resp(struct osmocom_ms *ms, struct msgb *msg)
struct gsm_time tm;
if (msgb_l3len(msg) < sizeof(*sb)) {
- fprintf(stderr, "MSG too short for CCCH RESP: %u\n", msgb_l3len(msg));
+ LOGP(DL1C, LOGL_ERROR, "MSG too short for CCCH RESP: %u\n",
+ msgb_l3len(msg));
return -1;
}
@@ -83,7 +85,7 @@ static int rx_l1_ccch_resp(struct osmocom_ms *ms, struct msgb *msg)
sb = (struct l1ctl_sync_new_ccch_resp *) dl->payload;
gsm_fn2gsmtime(&tm, ntohl(dl->frame_nr));
- printf("SCH: SNR: %u TDMA: (%.4u/%.2u/%.2u) bsic: %d\n",
+ DEBUGP(DL1C, "SCH: SNR: %u TDMA: (%.4u/%.2u/%.2u) bsic: %d\n",
dl->snr, tm.t1, tm.t2, tm.t3, sb->bsic);
return 0;
@@ -127,7 +129,8 @@ static int rx_ph_data_ind(struct osmocom_ms *ms, struct msgb *msg)
struct gsm_time tm;
if (msgb_l3len(msg) < sizeof(*ccch)) {
- fprintf(stderr, "MSG too short Data Ind: %u\n", msgb_l3len(msg));
+ LOGP(DL1C, LOGL_ERROR, "MSG too short Data Ind: %u\n",
+ msgb_l3len(msg));
return -1;
}
@@ -137,21 +140,23 @@ static int rx_ph_data_ind(struct osmocom_ms *ms, struct msgb *msg)
gsm_fn2gsmtime(&tm, ntohl(dl->frame_nr));
rsl_dec_chan_nr(dl->chan_nr, &chan_type, &chan_ss, &chan_ts);
- printf("%s (%.4u/%.2u/%.2u) %s\n",
+ DEBUGP(DL1C, "%s (%.4u/%.2u/%.2u) %s\n",
chan_nr2string(dl->chan_nr), tm.t1, tm.t2, tm.t3,
hexdump(ccch->data, sizeof(ccch->data)));
/* send CCCH data via GSMTAP */
gsmtap_chan_type = chantype_rsl2gsmtap(chan_type, dl->link_id);
gsmtap_sendmsg(dl->band_arfcn, chan_ts, gsmtap_chan_type, chan_ss,
- tm.fn, dl->rx_level-110, dl->snr, ccch->data, sizeof(ccch->data));
+ tm.fn, dl->rx_level-110, dl->snr, ccch->data,
+ sizeof(ccch->data));
/* determine LAPDm entity based on SACCH or not */
if (dl->link_id & 0x40)
le = &ms->lapdm_acch;
else
le = &ms->lapdm_dcch;
- /* make local stack copy of l1ctl_info_dl, as LAPDm will overwrite skb hdr */
+ /* make local stack copy of l1ctl_info_dl, as LAPDm will
+ * overwrite skb hdr */
memcpy(&dl_cpy, dl, sizeof(dl_cpy));
/* pull the L1 header from the msgb */
@@ -173,14 +178,16 @@ int tx_ph_data_req(struct osmocom_ms *ms, struct msgb *msg,
uint8_t chan_type, chan_ts, chan_ss;
uint8_t gsmtap_chan_type;
- printf("tx_ph_data_req(%s)\n", hexdump(msg->l2h, msgb_l2len(msg)));
+ DEBUGP(DL1C, "(%s)\n", hexdump(msg->l2h, msgb_l2len(msg)));
if (msgb_l2len(msg) > 23) {
- printf("L1 cannot handle message length > 23 (%u)\n", msgb_l2len(msg));
+ LOGP(DL1C, LOGL_ERROR, "L1 cannot handle message length "
+ "> 23 (%u)\n", msgb_l2len(msg));
msgb_free(msg);
return -EINVAL;
} else if (msgb_l2len(msg) < 23)
- printf("L1 message length < 23 (%u) doesn't seem right!\n", msgb_l2len(msg));
+ LOGP(DL1C, LOGL_ERROR, "L1 message length < 23 (%u) "
+ "doesn't seem right!\n", msgb_l2len(msg));
/* send copy via GSMTAP */
rsl_dec_chan_nr(chan_nr, &chan_type, &chan_ss, &chan_ts);
@@ -215,7 +222,7 @@ static int rx_l1_reset(struct osmocom_ms *ms)
if (!msg)
return -1;
- printf("Layer1 Reset.\n");
+ LOGP(DL1C, LOGL_INFO, "Layer1 Reset.\n");
req = (struct l1ctl_sync_new_ccch_req *) msgb_put(msg, sizeof(*req));
req->band_arfcn = osmo_make_band_arfcn(ms);
@@ -234,7 +241,7 @@ int tx_ph_rach_req(struct osmocom_ms *ms)
if (!msg)
return -1;
- printf("RACH Req.\n");
+ DEBUGP(DL1C, "RACH Req.\n");
ul = (struct l1ctl_info_ul *) msgb_put(msg, sizeof(*ul));
req = (struct l1ctl_rach_req *) msgb_put(msg, sizeof(*req));
req->ra = i++;
@@ -253,7 +260,7 @@ int tx_ph_dm_est_req(struct osmocom_ms *ms, uint16_t band_arfcn, uint8_t chan_nr
if (!msg)
return -1;
- printf("Tx Dedic.Mode Est Req (arfcn=%u, chan_nr=0x%02x)\n",
+ DEBUGP(DL1C, "Tx Dedic.Mode Est Req (arfcn=%u, chan_nr=0x%02x)\n",
band_arfcn, chan_nr);
ul = (struct l1ctl_info_ul *) msgb_put(msg, sizeof(*ul));
ul->chan_nr = chan_nr;
@@ -273,7 +280,8 @@ int l1ctl_recv(struct osmocom_ms *ms, struct msgb *msg)
struct l1ctl_info_dl *dl;
if (msgb_l2len(msg) < sizeof(*dl)) {
- fprintf(stderr, "Short Layer2 message: %u\n", msgb_l2len(msg));
+ LOGP(DL1C, LOGL_ERROR, "Short Layer2 message: %u\n",
+ msgb_l2len(msg));
return -1;
}
diff --git a/src/host/layer23/src/lapdm.c b/src/host/layer23/src/lapdm.c
index e1f40a40..700b954a 100644
--- a/src/host/layer23/src/lapdm.c
+++ b/src/host/layer23/src/lapdm.c
@@ -36,6 +36,7 @@
#include <osmocom/osmocom_data.h>
#include <osmocom/l1ctl.h>
#include <osmocom/lapdm.h>
+#include <osmocom/logging.h>
#include <l1a_l23_interface.h>
@@ -179,7 +180,8 @@ static void lapdm_pad_msgb(struct msgb *msg)
uint8_t *data;
if (pad_len < 0) {
- printf("cannot pad message that is already too big!\n");
+ LOGP(DLAPDM, LOGL_ERROR,
+ "cannot pad message that is already too big!\n");
return;
}
@@ -221,11 +223,13 @@ static int check_length_ind(uint8_t length_ind)
/* G.4.1 If the EL bit is set to "0", an MDL-ERROR-INDICATION
* primitive with cause "frame not implemented" is sent to the
* mobile management entity. */
- printf("we don't support multi-octet length\n");
+ LOGP(DLAPDM, LOGL_ERROR,
+ "we don't support multi-octet length\n");
return -EINVAL;
}
if (length_ind & 0x02) {
- printf("we don't support LAPDm fragmentation yet\n");
+ LOGP(DLAPDM, LOGL_ERROR,
+ "we don't support LAPDm fragmentation yet\n");
return -EINVAL;
}
return 0;
@@ -236,7 +240,7 @@ static void lapdm_t200_cb(void *data)
{
struct lapdm_datalink *dl = data;
- printf("lapdm_t200_cb(%p) state=%u\n", dl, dl->state);
+ DEBUGP(DLAPDM, "lapdm_t200_cb(%p) state=%u\n", dl, dl->state);
switch (dl->state) {
case LAPDm_STATE_SABM_SENT:
@@ -269,7 +273,8 @@ static void lapdm_t200_cb(void *data)
}
break;
default:
- printf("T200 expired in unexpected dl->state %u\n", dl->state);
+ DEBUGP(DLAPDM, "T200 expired in unexpected dl->state %u\n",
+ dl->state);
}
}
@@ -297,7 +302,7 @@ static int lapdm_rx_u(struct msgb *msg, struct lapdm_msg_ctx *mctx)
switch (LAPDm_CTRL_U_BITS(mctx->ctrl)) {
case LAPDm_U_SABM:
- printf("SABM ");
+ DEBUGPC(DLAPDM, "SABM ");
/* Must be Format B */
rc = check_length_ind(msg->l2h[2]);
if (rc < 0)
@@ -309,7 +314,8 @@ static int lapdm_rx_u(struct msgb *msg, struct lapdm_msg_ctx *mctx)
/* FIXME: re-establishment procedure 5.6 */
} else {
/* FIXME: check for contention resoultion */
- printf("SABM command, multiple frame established state\n");
+ DEBUGP(DLAPDM, "SABM command, multiple "
+ "frame established state\n");
return 0;
}
}
@@ -328,7 +334,7 @@ static int lapdm_rx_u(struct msgb *msg, struct lapdm_msg_ctx *mctx)
#endif
break;
case LAPDm_U_DM:
- printf("DM ");
+ DEBUGPC(DLAPDM, "DM ");
if (!LAPDm_CTRL_PF_BIT(mctx->ctrl)) {
/* 5.4.1.2 DM responses with the F bit set to "0" shall be ignored. */
return 0;
@@ -336,18 +342,18 @@ static int lapdm_rx_u(struct msgb *msg, struct lapdm_msg_ctx *mctx)
switch (dl->state) {
case LAPDm_STATE_IDLE:
/* 5.4.5 all other frame types shall be discarded */
- printf("state=IDLE (discarding) ");
+ DEBUGPC(DLAPDM, "state=IDLE (discarding) ");
return 0;
case LAPDm_STATE_MF_EST:
if (LAPDm_CTRL_PF_BIT(mctx->ctrl) == 1)
- printf("unsolicited DM resposne ");
+ DEBUGPC(DLAPDM, "unsolicited DM resposne ");
else
- printf("unsolicited DM resposne, multiple frame established state ");
+ DEBUGPC(DLAPDM, "unsolicited DM resposne, multiple frame established state ");
return 0;
case LAPDm_STATE_TIMER_RECOV:
/* DM is normal in case PF = 1 */
if (LAPDm_CTRL_PF_BIT(mctx->ctrl) == 0) {
- printf("unsolicited DM resposne, multiple frame established state ");
+ DEBUGPC(DLAPDM, "unsolicited DM resposne, multiple frame established state ");
return 0;
}
break;
@@ -357,7 +363,7 @@ static int lapdm_rx_u(struct msgb *msg, struct lapdm_msg_ctx *mctx)
rc = send_rslms_rll_simple(RSL_MT_REL_IND, mctx);
break;
case LAPDm_U_UI:
- printf("UI ");
+ DEBUGP(DLAPDM, "UI ");
if (mctx->lapdm_fmt == LAPDm_FMT_B4) {
length = N201_B4;
msg->l3h = msg->l2h + 2;
@@ -371,7 +377,7 @@ static int lapdm_rx_u(struct msgb *msg, struct lapdm_msg_ctx *mctx)
/* do some length checks */
if (length == 0) {
/* 5.3.3 UI frames received with the length indicator set to "0" shall be ignored */
- printf("length=0 (discarding) ");
+ DEBUGP(DLAPDM, "length=0 (discarding) ");
return 0;
}
/* FIXME: G.4.5 check */
@@ -381,21 +387,22 @@ static int lapdm_rx_u(struct msgb *msg, struct lapdm_msg_ctx *mctx)
break;
default:
/* 5.3.3 UI frames with invalid SAPI values shall be discarded */
- printf("sapi=%u (discarding) ", LAPDm_ADDR_SAPI(mctx->ctrl));
+ DEBUGP(DLAPDM, "sapi=%u (discarding) ", LAPDm_ADDR_SAPI(mctx->ctrl));
return 0;
}
msgb_pull_l2h(msg);
rc = send_rslms_rll_l3(RSL_MT_UNIT_DATA_IND, mctx, msg);
break;
case LAPDm_U_DISC:
- printf("DISC ");
+ DEBUGP(DLAPDM, "DISC ");
length = msg->l2h[2] >> 2;
if (length > 0 || msg->l2h[2] & 0x02) {
/* G.4.4 If a DISC or DM frame is received with L>0 or
* with the M bit set to "1", an MDL-ERROR-INDICATION
* primitive with cause "U frame with incorrect
* parameters" is sent to the mobile management entity. */
- printf("U frame iwth incorrect parameters ");
+ LOGP(DLAPDM, LOGL_ERROR,
+ "U frame iwth incorrect parameters ");
return -EIO;
}
switch (dl->state) {
@@ -408,11 +415,11 @@ static int lapdm_rx_u(struct msgb *msg, struct lapdm_msg_ctx *mctx)
}
break;
case LAPDm_U_UA:
- printf("UA ");
+ DEBUGP(DLAPDM, "UA ");
/* FIXME: G.4.5 check */
if (!LAPDm_CTRL_PF_BIT(mctx->ctrl)) {
/* 5.4.1.2 A UA response with the F bit set to "0" shall be ignored. */
- printf("F=0 (discarding) ");
+ DEBUGP(DLAPDM, "F=0 (discarding) ");
return 0;
}
switch (dl->state) {
@@ -421,7 +428,8 @@ static int lapdm_rx_u(struct msgb *msg, struct lapdm_msg_ctx *mctx)
case LAPDm_STATE_IDLE:
/* 5.4.5 all other frame types shall be discarded */
default:
- printf("unsolicited UA response! (discarding) ");
+ DEBUGP(DLAPDM,
+ "unsolicited UA response! (discarding) ");
return 0;
}
/* reset Timer T200 */
@@ -510,7 +518,8 @@ static int lapdm_rx_i(struct msgb *msg, struct lapdm_msg_ctx *mctx)
msgb_pull_l2h(msg);
rc = send_rslms_rll_l3(RSL_MT_DATA_IND, mctx, msg);
} else {
- printf("N(s) sequence error: Ns=%u, V_recv=%u ", ns, dl->V_recv);
+ LOGP(DLAPDM, LOGL_INFO, "N(s) sequence error: Ns=%u, "
+ "V_recv=%u ", ns, dl->V_recv);
/* FIXME: 5.7.1: N(s) sequence error */
/* discard data */
return -EIO;
@@ -568,7 +577,7 @@ static int lapdm_ph_data_ind(struct msgb *msg, struct lapdm_msg_ctx *mctx)
else if (LAPDm_CTRL_is_I(mctx->ctrl))
rc = lapdm_rx_i(msg, mctx);
else {
- printf("unknown LAPDm format ");
+ LOGP(DLAPDM, LOGL_ERROR, "unknown LAPDm format ");
rc = -EINVAL;
}
return rc;
@@ -582,7 +591,7 @@ int l2_ph_data_ind(struct msgb *msg, struct lapdm_entity *le, struct l1ctl_info_
struct lapdm_msg_ctx mctx;
int rc;
- printf("l2_ph_data_ind() ");
+ DEBUGP(DLAPDM, "");
/* when we reach here, we have a msgb with l2h pointing to the raw
* 23byte mac block. The l1h has already been purged. */
@@ -595,19 +604,19 @@ int l2_ph_data_ind(struct msgb *msg, struct lapdm_entity *le, struct l1ctl_info_
if (cbits == 0x10 || cbits == 0x12) {
/* Format Bbis is used on BCCH and CCCH(PCH, NCH and AGCH) */
mctx.lapdm_fmt = LAPDm_FMT_Bbis;
- printf("fmt=Bbis ");
+ DEBUGPC(DLAPDM, "fmt=Bbis ");
} else {
if (mctx.link_id & 0x40) {
/* It was received from network on SACCH, thus
* lapdm_fmt must be B4 */
mctx.lapdm_fmt = LAPDm_FMT_B4;
- printf("fmt=B4 ");
+ DEBUGPC(DLAPDM, "fmt=B4 ");
/* SACCH frames have a two-byte L1 header that OsmocomBB L1 doesn't
* strip */
msg->l2h += 2;
} else {
mctx.lapdm_fmt = LAPDm_FMT_B;
- printf("fmt=B ");
+ DEBUGPC(DLAPDM, "fmt=B ");
}
}
@@ -617,7 +626,8 @@ int l2_ph_data_ind(struct msgb *msg, struct lapdm_entity *le, struct l1ctl_info_
case LAPDm_FMT_B4:
mctx.addr = msg->l2h[0];
if (!(mctx.addr & 0x01)) {
- printf("we don't support multibyte addresses (discarding)\n");
+ LOGP(DLAPDM, LOGL_ERROR, "we don't support "
+ "multibyte addresses (discarding)\n");
return -EINVAL;
}
mctx.ctrl = msg->l2h[1];
@@ -630,13 +640,13 @@ int l2_ph_data_ind(struct msgb *msg, struct lapdm_entity *le, struct l1ctl_info_
break;
case LAPDm_FMT_Bbis:
/* directly pass up to layer3 */
- printf("UI ");
+ DEBUGPC(DLAPDM, "UI ");
msg->l3h = msg->l2h;
msgb_pull_l2h(msg);
rc = send_rslms_rll_l3(RSL_MT_UNIT_DATA_IND, &mctx, msg);
break;
}
- printf("\n");
+ DEBUGPC(DLAPDM, "\n");
return rc;
}
@@ -653,7 +663,7 @@ static int rslms_rx_rll_est_req(struct msgb *msg, struct lapdm_datalink *dl)
struct tlv_parsed tv;
uint8_t len;
- printf("RSL_MT_EST_REQ ");
+ DEBUGP(DRSL, "RSL_MT_EST_REQ ");
rsl_tlv_parse(&tv, rllh->data, msgb_l2len(msg)-sizeof(*rllh));
if (TLVP_PRESENT(&tv, RSL_IE_L3_INFO)) {
@@ -662,14 +672,16 @@ static int rslms_rx_rll_est_req(struct msgb *msg, struct lapdm_datalink *dl)
/* 5.4.1.4: The data link layer shall, however, ignore any such
* service request if it is not in the idle state when the
* request is received. */
- printf("DL state != IDLE (discarding)\n");
+ LOGP(DRSL, LOGL_INFO,
+ "DL state != IDLE (discarding)\n");
msgb_free(msg);
return 0;
}
if (sapi != 0) {
/* According to clause 6, the contention resolution
* procedure is only permitted with SAPI value 0 */
- printf("SAPI != 0 but contention resolution (discarding)\n");
+ LOGP(DRSL, LOGL_INFO, "SAPI != 0 but contention"
+ "resolution (discarding)\n");
msgb_free(msg);
return -EINVAL;
}
@@ -736,7 +748,8 @@ static int rslms_rx_rll_data_req(struct msgb *msg, struct lapdm_datalink *dl)
case LAPDm_STATE_MF_EST:
break;
default:
- printf("refusing RLL DATA REQ during DL state %u\n", dl->state);
+ LOGP(DRSL, LOGL_NOTICE, "refusing RLL DATA REQ during "
+ "DL state %u\n", dl->state);
return -EIO;
break;
}
@@ -805,7 +818,7 @@ static int rslms_rx_rll(struct msgb *msg, struct osmocom_ms *ms)
case RSL_MT_REL_REQ:
/* FIXME: create and send DISC command */
default:
- printf("unknown RLL message type 0x%02x\n",
+ LOGP(DRSL, LOGL_NOTICE, "unknown RLL message type 0x%02x\n",
rllh->c.msg_type);
break;
}
@@ -821,12 +834,12 @@ int rslms_recvmsg(struct msgb *msg, struct osmocom_ms *ms)
switch (rslh->msg_discr & 0xfe) {
case ABIS_RSL_MDISC_RLL:
- printf("rslms_recvmsg(ABIS_RSL_MDISC_RLL)\n");
+ DEBUGP(DRSL, "rslms_recvmsg(ABIS_RSL_MDISC_RLL)\n");
rc = rslms_rx_rll(msg, ms);
break;
default:
- printf("unknown RSLms message discriminator 0x%02x",
- rslh->msg_discr);
+ LOGP(DRSL, LOGL_ERROR, "unknown RSLms message "
+ "discriminator 0x%02x", rslh->msg_discr);
msgb_free(msg);
return -EINVAL;
}
diff --git a/src/host/layer23/src/layer3.c b/src/host/layer23/src/layer3.c
index ea6491e6..90625466 100644
--- a/src/host/layer23/src/layer3.c
+++ b/src/host/layer23/src/layer3.c
@@ -7,6 +7,7 @@
#include <osmocore/tlv.h>
#include <osmocore/protocol/gsm_04_08.h>
+#include <osmocom/logging.h>
#include <osmocom/lapdm.h>
#include <osmocom/rslms.h>
#include <osmocom/layer3.h>
@@ -133,7 +134,7 @@ static int gsm48_tx_loc_upd_req(struct osmocom_ms *ms, uint8_t chan_nr)
struct gsm48_hdr *gh;
struct gsm48_loc_upd_req *lu_r;
- printf("gsm48_tx_loc_upd_req()\n");
+ DEBUGP(DMM, "chan_nr=%u\n", chan_nr);
msg->l3h = msgb_put(msg, sizeof(*gh));
gh = (struct gsm48_hdr *) msg->l3h;
@@ -158,8 +159,9 @@ static int gsm48_rx_imm_ass(struct msgb *msg, struct osmocom_ms *ms)
rsl_dec_chan_nr(ia->chan_desc.chan_nr, &ch_type, &ch_subch, &ch_ts);
arfcn = ia->chan_desc.h0.arfcn_low | (ia->chan_desc.h0.arfcn_high << 8);
- printf("GSM48 IMM ASS (ra=0x%02x, chan_nr=0x%02x, ARFCN=%u, TS=%u, SS=%u, TSC=%u) ",
- ia->req_ref.ra, ia->chan_desc.chan_nr, arfcn, ch_ts, ch_subch,
+ DEBUGP(DRR, "GSM48 IMM ASS (ra=0x%02x, chan_nr=0x%02x, "
+ "ARFCN=%u, TS=%u, SS=%u, TSC=%u) ", ia->req_ref.ra,
+ ia->chan_desc.chan_nr, arfcn, ch_ts, ch_subch,
ia->chan_desc.h0.tsc);
/* FIXME: compare RA and GSM time with when we sent RACH req */
@@ -167,7 +169,7 @@ static int gsm48_rx_imm_ass(struct msgb *msg, struct osmocom_ms *ms)
/* check if we can support this type of channel at the moment */
if (ch_type != RSL_CHAN_SDCCH4_ACCH || ch_ts != 0 ||
ia->chan_desc.h0.h == 1) {
- printf("UNSUPPORTED!\n");
+ DEBUGPC(DRR, "UNSUPPORTED!\n");
return 0;
}
@@ -177,6 +179,8 @@ static int gsm48_rx_imm_ass(struct msgb *msg, struct osmocom_ms *ms)
/* request L2 to establish the SAPI0 connection */
gsm48_tx_loc_upd_req(ms, ia->chan_desc.chan_nr);
+ DEBUGPC(DRR, "\n");
+
return 0;
}
@@ -186,7 +190,7 @@ int gsm48_rx_ccch(struct msgb *msg, struct osmocom_ms *ms)
int rc = 0;
if (sih->rr_protocol_discriminator != GSM48_PDISC_RR)
- printf("PCH pdisc != RR\n");
+ LOGP(DRR, LOGL_ERROR, "PCH pdisc != RR\n");
switch (sih->system_information) {
case GSM48_MT_RR_PAG_REQ_1:
@@ -198,7 +202,8 @@ int gsm48_rx_ccch(struct msgb *msg, struct osmocom_ms *ms)
rc = gsm48_rx_imm_ass(msg, ms);
break;
default:
- printf("unknown PCH/AGCH type 0x%02x\n", sih->system_information);
+ LOGP(DRR, LOGL_NOTICE, "unknown PCH/AGCH type 0x%02x\n",
+ sih->system_information);
rc = -EINVAL;
}
diff --git a/src/host/layer23/src/logging.c b/src/host/layer23/src/logging.c
new file mode 100644
index 00000000..f2642ce7
--- /dev/null
+++ b/src/host/layer23/src/logging.c
@@ -0,0 +1,87 @@
+/* Logging/Debug support of the layer2/3 stack */
+
+/* (C) 2010 by Harald Welte <laforge@gnumonks.org>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+
+#include <osmocore/utils.h>
+#include <osmocore/logging.h>
+#include <osmocom/logging.h>
+
+static const struct log_info_cat default_categories[] = {
+ [DRSL] = {
+ .name = "DRSL",
+ .description = "Radio Signalling Link (MS)",
+ .color = "\033[1;35m",
+ .enabled = 1, .loglevel = LOGL_DEBUG,
+ },
+ [DRR] = {
+ .name = "DRR",
+ .description = "Radio Resource",
+ .color = "\033[1;34m",
+ .enabled = 1, .loglevel = LOGL_DEBUG,
+ },
+ [DMM] = {
+ .name = "DMM",
+ .description = "Mobility Management",
+ .color = "\033[1;33m",
+ .enabled = 1, .loglevel = LOGL_DEBUG,
+ },
+ [DCC] = {
+ .name = "DCC",
+ .description = "Call Control",
+ .color = "\033[1;32m",
+ .enabled = 1, .loglevel = LOGL_DEBUG,
+ },
+ [DSMS] = {
+ .name = "DSMS",
+ .description = "Short Message Service",
+ .color = "\033[1;37m",
+ .enabled = 1, .loglevel = LOGL_DEBUG,
+ },
+ [DMEAS] = {
+ .name = "DMEAS",
+ .description = "MEasurement Reporting",
+ .enabled = 1, .loglevel = LOGL_DEBUG,
+ },
+ [DPAG] = {
+ .name = "DPAG",
+ .description = "Paging",
+ .enabled = 1, .loglevel = LOGL_DEBUG,
+ },
+ [DLAPDM] = {
+ .name = "DLAPDM",
+ .description = "LAPDm Layer2",
+ .enabled = 1, .loglevel = LOGL_DEBUG,
+ },
+ [DL1C] = {
+ .name = "DL1C",
+ .description = "Layer 1 Control",
+ .color = "\033[1;31m",
+ .enabled = 1, .loglevel = LOGL_DEBUG,
+ },
+};
+
+const struct log_info log_info = {
+ .filter_fn = NULL,
+ .cat = default_categories,
+ .num_cat = ARRAY_SIZE(default_categories),
+};
+
diff --git a/src/host/layer23/src/main.c b/src/host/layer23/src/main.c
index ae48d646..83455464 100644
--- a/src/host/layer23/src/main.c
+++ b/src/host/layer23/src/main.c
@@ -25,8 +25,8 @@
#include <osmocom/l1ctl.h>
#include <osmocom/lapdm.h>
#include <osmocom/gsmtap_util.h>
+#include <osmocom/logging.h>
-#include <osmocore/logging.h>
#include <osmocore/msgb.h>
#include <osmocore/talloc.h>
#include <osmocore/select.h>
@@ -43,6 +43,7 @@
#include <errno.h>
#include <fcntl.h>
+static struct log_target *stderr_target;
#define GSM_L2_LENGTH 256
@@ -150,10 +151,11 @@ static void handle_options(int argc, char **argv)
{"socket", 1, 0, 's'},
{"arfcn", 1, 0, 'a'},
{"gsmtap-ip", 1, 0, 'i'},
+ {"debug", 1, 0, 'd'},
{0, 0, 0, 0},
};
- c = getopt_long(argc, argv, "hs:a:i:",
+ c = getopt_long(argc, argv, "hs:a:i:d:",
long_options, &option_index);
if (c == -1)
break;
@@ -177,6 +179,9 @@ static void handle_options(int argc, char **argv)
}
gsmtap_ip = ntohl(gsmtap.sin_addr.s_addr);
break;
+ case 'd':
+ log_parse_category_mask(stderr_target, optarg);
+ break;
default:
break;
}
@@ -188,6 +193,11 @@ int main(int argc, char **argv)
int rc;
struct sockaddr_un local;
+ log_init(&log_info);
+ stderr_target = log_target_create_stderr();
+ log_add_target(stderr_target);
+ log_set_all_filter(stderr_target, 1);
+
l2_ctx = talloc_named_const(NULL, 1, "layer2 context");
ms = talloc_zero(l2_ctx, struct osmocom_ms);
@@ -243,6 +253,5 @@ int main(int argc, char **argv)
bsc_select_main(0);
}
-
return 0;
}
diff --git a/src/host/layer23/src/rslms.c b/src/host/layer23/src/rslms.c
index 86079acd..5b1cc060 100644
--- a/src/host/layer23/src/rslms.c
+++ b/src/host/layer23/src/rslms.c
@@ -29,6 +29,7 @@
#include <osmocore/tlv.h>
#include <osmocore/protocol/gsm_04_08.h>
+#include <osmocom/logging.h>
#include <osmocom/lapdm.h>
#include <osmocom/rslms.h>
#include <osmocom/layer3.h>
@@ -63,12 +64,12 @@ static int rslms_rx_udata_ind(struct msgb *msg, struct osmocom_ms *ms)
struct tlv_parsed tv;
int rc = 0;
- printf("RSLms UNIT DATA IND chan_nr=0x%02x link_id=0x%02x\n",
+ DEBUGP(DRSL, "RSLms UNIT DATA IND chan_nr=0x%02x link_id=0x%02x\n",
rllh->chan_nr, rllh->link_id);
rsl_tlv_parse(&tv, rllh->data, msgb_l2len(msg)-sizeof(*rllh));
if (!TLVP_PRESENT(&tv, RSL_IE_L3_INFO)) {
- printf("UNIT_DATA_IND without L3 INFO ?!?\n");
+ DEBUGP(DRSL, "UNIT_DATA_IND without L3 INFO ?!?\n");
return -EIO;
}
msg->l3h = (uint8_t *) TLVP_VAL(&tv, RSL_IE_L3_INFO);
@@ -93,30 +94,31 @@ static int rslms_rx_rll(struct msgb *msg, struct osmocom_ms *ms)
switch (rllh->c.msg_type) {
case RSL_MT_DATA_IND:
- printf("RSLms DATA IND\n");
+ DEBUGP(DRSL, "RSLms DATA IND\n");
/* FIXME: implement this */
break;
case RSL_MT_UNIT_DATA_IND:
rc = rslms_rx_udata_ind(msg, ms);
break;
case RSL_MT_EST_IND:
- printf("RSLms EST IND\n");
+ DEBUGP(DRSL, "RSLms EST IND\n");
/* FIXME: implement this */
break;
case RSL_MT_EST_CONF:
- printf("RSLms EST CONF\n");
+ DEBUGP(DRSL, "RSLms EST CONF\n");
/* FIXME: implement this */
break;
case RSL_MT_REL_CONF:
- printf("RSLms REL CONF\n");
+ DEBUGP(DRSL, "RSLms REL CONF\n");
/* FIXME: implement this */
break;
case RSL_MT_ERROR_IND:
- printf("RSLms ERR IND\n");
+ DEBUGP(DRSL, "RSLms ERR IND\n");
/* FIXME: implement this */
break;
default:
- printf("unknown RSLms message type 0x%02x\n", rllh->c.msg_type);
+ LOGP(DRSL, LOGL_NOTICE, "unknown RSLms message type "
+ "0x%02x\n", rllh->c.msg_type);
rc = -EINVAL;
break;
}
@@ -135,7 +137,8 @@ int rslms_sendmsg(struct msgb *msg, struct osmocom_ms *ms)
break;
default:
/* FIXME: implement this */
- printf("unknown RSLms msg_discr 0x%02x\n", rslh->msg_discr);
+ LOGP(DRSL, LOGL_NOTICE, "unknown RSLms msg_discr 0x%02x\n",
+ rslh->msg_discr);
rc = -EINVAL;
break;
}