fixeria has uploaded this change for review.
trxcon: reorganize the core logic into libtrxcon.la
This is needed for the integration with osmo-trx-ms. It was decided
to run the scheduler within the transceiver process, so that we can
reduce scheduling latency. The idea is to link osmo-trx-ms against
the libtrxcon, which will evolve into the libosmo-trxcon.so soon.
We cannot use hard-coded logging categoris in a library, so add new
API for setting them: trxcon_set_log_cfg(). Use DLGLOBAL by default.
Change-Id: Idf207947f620a7394e0a0e5bf2c37bcd8df64bbe
Related: OS#5599
---
M src/host/trxcon/include/osmocom/bb/trxcon/trxcon.h
M src/host/trxcon/src/Makefile.am
M src/host/trxcon/src/l1ctl.c
M src/host/trxcon/src/logging.c
M src/host/trxcon/src/trxcon_fsm.c
M src/host/trxcon/src/trxcon_inst.c
M src/host/trxcon/src/trxcon_main.c
7 files changed, 91 insertions(+), 44 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/01/30101/1
diff --git a/src/host/trxcon/include/osmocom/bb/trxcon/trxcon.h b/src/host/trxcon/include/osmocom/bb/trxcon/trxcon.h
index e5ba5ec..9dae606 100644
--- a/src/host/trxcon/include/osmocom/bb/trxcon/trxcon.h
+++ b/src/host/trxcon/include/osmocom/bb/trxcon/trxcon.h
@@ -31,6 +31,16 @@
} l1p;
};
+struct trxcon_log_cfg {
+ int fsm; /* trxcon_fsm */
+ int l1c; /* L1CTL control */
+ int l1d; /* L1CTL data */
+ int schc; /* l1sched control */
+ int schd; /* l1sched data */
+};
+
+void trxcon_set_log_cfg(const struct trxcon_log_cfg *cfg);
+
struct trxcon_inst *trxcon_inst_alloc(void *ctx, unsigned int id, uint32_t fn_advance);
void trxcon_inst_free(struct trxcon_inst *trxcon);
diff --git a/src/host/trxcon/src/Makefile.am b/src/host/trxcon/src/Makefile.am
index e0dc337..e0ce6a2 100644
--- a/src/host/trxcon/src/Makefile.am
+++ b/src/host/trxcon/src/Makefile.am
@@ -35,20 +35,30 @@
$(NULL)
+noinst_LTLIBRARIES += libtrxcon.la
+
+libtrxcon_la_SOURCES = \
+ trxcon_inst.c \
+ trxcon_fsm.c \
+ l1ctl.c \
+ $(NULL)
+
+libtrxcon_la_LIBADD = \
+ libl1sched.la \
+ $(LIBOSMOCORE_LIBS) \
+ $(LIBOSMOGSM_LIBS) \
+ $(NULL)
+
+
bin_PROGRAMS = trxcon
trxcon_SOURCES = \
l1ctl_server.c \
- l1ctl.c \
- trx_if.c \
- logging.c \
- trxcon_fsm.c \
- trxcon_inst.c \
trxcon_main.c \
+ logging.c \
+ trx_if.c \
$(NULL)
trxcon_LDADD = \
- libl1sched.la \
- $(LIBOSMOCORE_LIBS) \
- $(LIBOSMOGSM_LIBS) \
+ libtrxcon.la \
$(NULL)
diff --git a/src/host/trxcon/src/l1ctl.c b/src/host/trxcon/src/l1ctl.c
index 17c136a..47998d6 100644
--- a/src/host/trxcon/src/l1ctl.c
+++ b/src/host/trxcon/src/l1ctl.c
@@ -32,6 +32,7 @@
#include <osmocom/core/fsm.h>
#include <osmocom/core/msgb.h>
#include <osmocom/core/talloc.h>
+#include <osmocom/core/logging.h>
#include <osmocom/gsm/gsm0502.h>
#include <osmocom/gsm/gsm_utils.h>
@@ -45,6 +46,10 @@
#define L1CTL_LENGTH 256
#define L1CTL_HEADROOM 32
+/* Logging categories configurable via trxcon_set_log_cfg() */
+int g_logc_l1c = DLGLOBAL;
+int g_logc_l1d = DLGLOBAL;
+
static const char *arfcn2band_name(uint16_t arfcn)
{
enum gsm_band band;
@@ -67,7 +72,7 @@
msg = msgb_alloc_headroom(L1CTL_LENGTH + L1CTL_HEADROOM,
L1CTL_HEADROOM, "l1ctl_tx_msg");
if (!msg) {
- LOGP(DL1C, LOGL_ERROR, "Failed to allocate memory\n");
+ LOGP(g_logc_l1c, LOGL_ERROR, "Failed to allocate memory\n");
return NULL;
}
@@ -88,7 +93,7 @@
if (!msg)
return -ENOMEM;
- LOGPFSMSL(fi, DL1C, LOGL_DEBUG,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_DEBUG,
"Send PM Conf (%s %d = %d dBm)\n",
arfcn2band_name(band_arfcn),
band_arfcn & ~ARFCN_FLAG_MASK, dbm);
@@ -116,7 +121,7 @@
if (!msg)
return -ENOMEM;
- LOGPFSMSL(fi, DL1C, LOGL_DEBUG, "Send Reset Ind (%u)\n", type);
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_DEBUG, "Send Reset Ind (%u)\n", type);
res = (struct l1ctl_reset *) msgb_put(msg, sizeof(*res));
res->type = type;
@@ -134,7 +139,7 @@
if (!msg)
return -ENOMEM;
- LOGPFSMSL(fi, DL1C, LOGL_DEBUG, "Send Reset Conf (%u)\n", type);
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_DEBUG, "Send Reset Conf (%u)\n", type);
res = (struct l1ctl_reset *) msgb_put(msg, sizeof(*res));
res->type = type;
@@ -183,7 +188,7 @@
fbsb_conf_make(msg, 255, 0);
- LOGPFSMSL(fi, DL1C, LOGL_DEBUG, "Send FBSB Conf (timeout)\n");
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_DEBUG, "Send FBSB Conf (timeout)\n");
return trxcon_l1ctl_send(trxcon, msg);
}
@@ -209,7 +214,7 @@
/* FIXME: set proper value */
conf->initial_freq_err = 0;
- LOGPFSMSL(fi, DL1C, LOGL_DEBUG,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_DEBUG,
"Send FBSB Conf (result=%u, bsic=%u)\n",
conf->result, conf->bsic);
@@ -323,7 +328,7 @@
return GSM_PCHAN_CCCH_SDCCH4_CBCH;
default:
- LOGP(DL1C, LOGL_NOTICE, "Undandled CCCH mode (%u), "
+ LOGP(g_logc_l1c, LOGL_NOTICE, "Undandled CCCH mode (%u), "
"assuming non-combined configuration\n", mode);
return GSM_PCHAN_CCCH;
}
@@ -337,7 +342,7 @@
fbsb = (struct l1ctl_fbsb_req *) msg->l1h;
if (msgb_l1len(msg) < sizeof(*fbsb)) {
- LOGPFSMSL(fi, DL1C, LOGL_ERROR,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_ERROR,
"MSG too short FBSB Req: %u\n",
msgb_l1len(msg));
rc = -EINVAL;
@@ -350,7 +355,7 @@
.band_arfcn = ntohs(fbsb->band_arfcn),
};
- LOGPFSMSL(fi, DL1C, LOGL_NOTICE,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_NOTICE,
"Received FBSB request (%s %d, timeout %u ms)\n",
arfcn2band_name(req.band_arfcn),
req.band_arfcn & ~ARFCN_FLAG_MASK,
@@ -371,7 +376,7 @@
pmr = (struct l1ctl_pm_req *) msg->l1h;
if (msgb_l1len(msg) < sizeof(*pmr)) {
- LOGPFSMSL(fi, DL1C, LOGL_ERROR,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_ERROR,
"MSG too short PM Req: %u\n",
msgb_l1len(msg));
rc = -EINVAL;
@@ -383,7 +388,7 @@
.band_arfcn_stop = ntohs(pmr->range.band_arfcn_to),
};
- LOGPFSMSL(fi, DL1C, LOGL_NOTICE,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_NOTICE,
"Received power measurement request (%s: %d -> %d)\n",
arfcn2band_name(req.band_arfcn_start),
req.band_arfcn_start & ~ARFCN_FLAG_MASK,
@@ -404,14 +409,14 @@
res = (struct l1ctl_reset *) msg->l1h;
if (msgb_l1len(msg) < sizeof(*res)) {
- LOGPFSMSL(fi, DL1C, LOGL_ERROR,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_ERROR,
"MSG too short Reset Req: %u\n",
msgb_l1len(msg));
rc = -EINVAL;
goto exit;
}
- LOGPFSMSL(fi, DL1C, LOGL_NOTICE,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_NOTICE,
"Received reset request (%u)\n", res->type);
switch (res->type) {
@@ -422,7 +427,7 @@
osmo_fsm_inst_dispatch(fi, TRXCON_EV_RESET_SCHED_REQ, NULL);
break;
default:
- LOGPFSMSL(fi, DL1C, LOGL_ERROR,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_ERROR,
"Unknown L1CTL_RESET_REQ type\n");
goto exit;
}
@@ -440,8 +445,8 @@
struct osmo_fsm_inst *fi = trxcon->fi;
struct l1ctl_hdr *l1h;
- LOGPFSMSL(fi, DL1C, LOGL_NOTICE, "Recv Echo Req\n");
- LOGPFSMSL(fi, DL1C, LOGL_NOTICE, "Send Echo Conf\n");
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_NOTICE, "Recv Echo Req\n");
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_NOTICE, "Send Echo Conf\n");
/* Nothing to do, just send it back */
l1h = (struct l1ctl_hdr *) msg->l1h;
@@ -459,14 +464,14 @@
mode_req = (struct l1ctl_ccch_mode_req *)msg->l1h;
if (msgb_l1len(msg) < sizeof(*mode_req)) {
- LOGPFSMSL(fi, DL1C, LOGL_ERROR,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_ERROR,
"MSG too short Reset Req: %u\n",
msgb_l1len(msg));
rc = -EINVAL;
goto exit;
}
- LOGPFSMSL(fi, DL1C, LOGL_NOTICE, "Received CCCH mode request (%u)\n",
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_NOTICE, "Received CCCH mode request (%u)\n",
mode_req->ccch_mode); /* TODO: add value-string for ccch_mode */
struct trxcon_param_set_ccch_tch_mode_req req = {
@@ -501,7 +506,7 @@
.is_11bit = true,
};
- LOGPFSMSL(fi, DL1C, LOGL_NOTICE,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_NOTICE,
"Received 11-bit RACH request "
"(offset=%u, synch_seq=%u, ra11=0x%02hx)\n",
req.offset, req.synch_seq, req.ra);
@@ -513,7 +518,7 @@
.ra = rr->ra,
};
- LOGPFSMSL(fi, DL1C, LOGL_NOTICE,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_NOTICE,
"Received 8-bit RACH request "
"(offset=%u, ra=0x%02x)\n", req.offset, req.ra);
}
@@ -521,7 +526,7 @@
/* The controlling L1CTL side always does include the UL info header,
* but may leave it empty. We assume RACH is on TS0 in this case. */
if (ul->chan_nr == 0x00) {
- LOGPFSMSL(fi, DL1C, LOGL_NOTICE,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_NOTICE,
"The UL info header is empty, assuming RACH is on TS0\n");
req.chan_nr = RSL_CHAN_RACH;
req.link_id = 0x00;
@@ -542,7 +547,7 @@
{
req->h0.band_arfcn = ntohs(h->band_arfcn);
- LOGPFSMSL(fi, DL1C, LOGL_NOTICE,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_NOTICE,
"L1CTL_DM_EST_REQ indicates single ARFCN %s %u\n",
arfcn2band_name(req->h0.band_arfcn),
req->h0.band_arfcn & ~ARFCN_FLAG_MASK);
@@ -556,18 +561,18 @@
{
unsigned int i;
- LOGPFSMSL(fi, DL1C, LOGL_NOTICE,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_NOTICE,
"L1CTL_DM_EST_REQ indicates a Frequency "
"Hopping (hsn=%u, maio=%u, chans=%u) channel\n",
h->hsn, h->maio, h->n);
/* No channels?!? */
if (!h->n) {
- LOGPFSMSL(fi, DL1C, LOGL_ERROR,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_ERROR,
"No channels in mobile allocation?!?\n");
return -EINVAL;
} else if (h->n > ARRAY_SIZE(h->ma)) {
- LOGPFSMSL(fi, DL1C, LOGL_ERROR,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_ERROR,
"More than 64 channels in mobile allocation?!?\n");
return -EINVAL;
}
@@ -599,7 +604,7 @@
.hopping = est_req->h,
};
- LOGPFSMSL(fi, DL1C, LOGL_NOTICE,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_NOTICE,
"Received L1CTL_DM_EST_REQ "
"(tn=%u, chan_nr=0x%02x, tsc=%u, tch_mode=0x%02x)\n",
req.chan_nr & 0x07, req.chan_nr, req.tsc, req.tch_mode);
@@ -623,7 +628,7 @@
{
struct osmo_fsm_inst *fi = trxcon->fi;
- LOGPFSMSL(fi, DL1C, LOGL_NOTICE, "Received L1CTL_DM_REL_REQ\n");
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_NOTICE, "Received L1CTL_DM_REL_REQ\n");
osmo_fsm_inst_dispatch(fi, TRXCON_EV_DEDICATED_RELEASE_REQ, NULL);
@@ -651,7 +656,7 @@
.data = ul->payload,
};
- LOGPFSMSL(fi, DL1D, LOGL_DEBUG,
+ LOGPFSMSL(fi, g_logc_l1d, LOGL_DEBUG,
"Recv %s Req (chan_nr=0x%02x, link_id=0x%02x, len=%zu)\n",
traffic ? "TRAFFIC" : "DATA", req.chan_nr, req.link_id, req.data_len);
@@ -678,7 +683,7 @@
ul = (struct l1ctl_info_ul *) msg->l1h;
par_req = (struct l1ctl_par_req *) ul->payload;
- LOGPFSMSL(fi, DL1C, LOGL_NOTICE,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_NOTICE,
"Received L1CTL_PARAM_REQ (ta=%d, tx_power=%u)\n",
par_req->ta, par_req->tx_power);
@@ -704,7 +709,7 @@
mode_req = (struct l1ctl_tch_mode_req *)msg->l1h;
- LOGPFSMSL(fi, DL1C, LOGL_NOTICE,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_NOTICE,
"Received L1CTL_TCH_MODE_REQ (tch_mode=%u, audio_mode=%u)\n",
mode_req->tch_mode, mode_req->audio_mode);
@@ -747,7 +752,7 @@
.key = cr->key,
};
- LOGPFSMSL(fi, DL1C, LOGL_NOTICE,
+ LOGPFSMSL(fi, g_logc_l1c, LOGL_NOTICE,
"L1CTL_CRYPTO_REQ (algo=A5/%u, key_len=%u)\n",
req.a5_algo, req.key_len);
@@ -800,13 +805,13 @@
case L1CTL_TBF_CFG_REQ:
case L1CTL_DM_FREQ_REQ:
case L1CTL_SIM_REQ:
- LOGPFSMSL(trxcon->fi, DL1C, LOGL_NOTICE,
+ LOGPFSMSL(trxcon->fi, g_logc_l1c, LOGL_NOTICE,
"Ignoring unsupported message (type=%u)\n",
l1h->msg_type);
msgb_free(msg);
return -ENOTSUP;
default:
- LOGPFSMSL(trxcon->fi, DL1C, LOGL_ERROR, "Unknown MSG type %u: %s\n",
+ LOGPFSMSL(trxcon->fi, g_logc_l1c, LOGL_ERROR, "Unknown MSG type %u: %s\n",
l1h->msg_type, osmo_hexdump(msgb_data(msg), msgb_length(msg)));
msgb_free(msg);
return -EINVAL;
diff --git a/src/host/trxcon/src/logging.c b/src/host/trxcon/src/logging.c
index 747b1ad..f5fdacc 100644
--- a/src/host/trxcon/src/logging.c
+++ b/src/host/trxcon/src/logging.c
@@ -21,6 +21,7 @@
#include <osmocom/core/logging.h>
#include <osmocom/core/utils.h>
+#include <osmocom/bb/trxcon/trxcon.h>
#include <osmocom/bb/trxcon/logging.h>
static struct log_info_cat trxcon_log_info_cat[] = {
@@ -80,5 +81,15 @@
if (category_mask)
log_parse_category_mask(osmo_stderr_target, category_mask);
+ const struct trxcon_log_cfg cfg = {
+ .fsm = DAPP,
+ .l1c = DL1C,
+ .l1d = DL1D,
+ .schc = DSCH,
+ .schd = DSCHD,
+ };
+
+ trxcon_set_log_cfg(&cfg);
+
return 0;
}
diff --git a/src/host/trxcon/src/trxcon_fsm.c b/src/host/trxcon/src/trxcon_fsm.c
index 28a4ecb..9980344 100644
--- a/src/host/trxcon/src/trxcon_fsm.c
+++ b/src/host/trxcon/src/trxcon_fsm.c
@@ -26,11 +26,11 @@
#include <osmocom/core/fsm.h>
#include <osmocom/core/msgb.h>
#include <osmocom/core/talloc.h>
+#include <osmocom/core/logging.h>
#include <osmocom/bb/trxcon/trxcon.h>
#include <osmocom/bb/trxcon/trxcon_fsm.h>
#include <osmocom/bb/trxcon/phyif.h>
-#include <osmocom/bb/trxcon/logging.h>
#include <osmocom/bb/trxcon/l1ctl.h>
#include <osmocom/bb/l1sched/l1sched.h>
#include <osmocom/bb/l1sched/logging.h>
@@ -649,7 +649,7 @@
.name = "trxcon",
.states = trxcon_fsm_states,
.num_states = ARRAY_SIZE(trxcon_fsm_states),
- .log_subsys = DAPP,
+ .log_subsys = DLGLOBAL,
.event_names = trxcon_fsm_event_names,
.allstate_event_mask = S(TRXCON_EV_PHYIF_FAILURE)
| S(TRXCON_EV_L2IF_FAILURE)
diff --git a/src/host/trxcon/src/trxcon_inst.c b/src/host/trxcon/src/trxcon_inst.c
index c3a85da..5d96021 100644
--- a/src/host/trxcon/src/trxcon_inst.c
+++ b/src/host/trxcon/src/trxcon_inst.c
@@ -26,6 +26,18 @@
#include <osmocom/bb/trxcon/trxcon.h>
#include <osmocom/bb/trxcon/trxcon_fsm.h>
#include <osmocom/bb/l1sched/l1sched.h>
+#include <osmocom/bb/l1sched/logging.h>
+
+extern int g_logc_l1c;
+extern int g_logc_l1d;
+
+void trxcon_set_log_cfg(const struct trxcon_log_cfg *cfg)
+{
+ l1sched_logging_init(cfg->schc, cfg->schd);
+ trxcon_fsm_def.log_subsys = cfg->fsm;
+ g_logc_l1c = cfg->l1c;
+ g_logc_l1d = cfg->l1d;
+}
struct trxcon_inst *trxcon_inst_alloc(void *ctx, unsigned int id, uint32_t fn_advance)
{
diff --git a/src/host/trxcon/src/trxcon_main.c b/src/host/trxcon/src/trxcon_main.c
index 1ed2f89..94deeab 100644
--- a/src/host/trxcon/src/trxcon_main.c
+++ b/src/host/trxcon/src/trxcon_main.c
@@ -543,7 +543,6 @@
/* Init logging system */
trxcon_logging_init(tall_trxcon_ctx, app_data.debug_mask);
- l1sched_logging_init(DSCH, DSCHD);
/* Configure pretty logging */
log_set_print_extended_timestamp(osmo_stderr_target, 1);
To view, visit change 30101. To unsubscribe, or for help writing mail filters, visit settings.