fixeria has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-gprs/+/29207 )
Change subject: rlcmac: make logging category configurable ......................................................................
rlcmac: make logging category configurable
Change-Id: Icfef6de126304da81120f1d7b212992ead3409aa --- M include/osmocom/gprs/rlcmac/gprs_rlcmac.h M src/rlcmac/Makefile.am M src/rlcmac/gprs_rlcmac.c A src/rlcmac/misc.c 4 files changed, 79 insertions(+), 52 deletions(-)
Approvals: Jenkins Builder: Verified neels: Looks good to me, but someone else must approve pespin: Looks good to me, approved
diff --git a/include/osmocom/gprs/rlcmac/gprs_rlcmac.h b/include/osmocom/gprs/rlcmac/gprs_rlcmac.h index f83a3f9..7163b7e 100644 --- a/include/osmocom/gprs/rlcmac/gprs_rlcmac.h +++ b/include/osmocom/gprs/rlcmac/gprs_rlcmac.h @@ -5376,3 +5376,5 @@ int osmo_gprs_rlcmac_decode_ms_ra_cap(struct bitvec *vector, MS_Radio_Access_capability_t * data); int osmo_gprs_rlcmac_encode_ms_ra_cap(struct bitvec *vector, MS_Radio_Access_capability_t * data); int osmo_gprs_rlcmac_decode_egprs_pkt_ch_req(guint16 ra, EGPRS_PacketChannelRequest_t *data); + +void osmo_gprs_rlcmac_set_log_cat(int cat); diff --git a/src/rlcmac/Makefile.am b/src/rlcmac/Makefile.am index 51e9ec1..d484a6f 100644 --- a/src/rlcmac/Makefile.am +++ b/src/rlcmac/Makefile.am @@ -23,6 +23,7 @@
libosmo_gprs_rlcmac_la_SOURCES = \ gprs_rlcmac.c \ + misc.c \ $(NULL)
libosmo_gprs_rlcmac_la_LDFLAGS = \ diff --git a/src/rlcmac/gprs_rlcmac.c b/src/rlcmac/gprs_rlcmac.c index 80b399b..b0b7ca8 100644 --- a/src/rlcmac/gprs_rlcmac.c +++ b/src/rlcmac/gprs_rlcmac.c @@ -35,8 +35,7 @@ #include <osmocom/csn1/csn1.h> #include <osmocom/gprs/rlcmac/gprs_rlcmac.h>
-/* FIXME: configurable logging category */ -#define DRLCMACDATA DLGLOBAL +extern int g_log_cat;
/* Payload type as defined in TS 44.060 / 10.4.7 */ #define PAYLOAD_TYPE_DATA 0 @@ -5377,12 +5376,12 @@
if (payload_type == PAYLOAD_TYPE_DATA) { - LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n"); + LOGP(g_log_cat, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n"); return CSN_ERROR_GENERAL; } else if (payload_type == PAYLOAD_TYPE_RESERVED) { - LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n"); + LOGP(g_log_cat, LOGL_NOTICE, "Payload Type: RESERVED (3)\n"); return CSN_ERROR_GENERAL; }
@@ -5484,7 +5483,7 @@ LOGPC(DLCSN1, LOGL_INFO, "\n");
if (ret > 0) { - LOGP(DRLCMACDATA, LOGL_NOTICE, "%s: Got %d remaining bits unhandled by decoder at the end of bitvec\n", msg_type_name, ret); + LOGP(g_log_cat, LOGL_NOTICE, "%s: Got %d remaining bits unhandled by decoder at the end of bitvec\n", msg_type_name, ret); ret = 0; }
@@ -5509,12 +5508,12 @@
if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_DATA) { - LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n"); + LOGP(g_log_cat, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n"); return CSN_ERROR_GENERAL; } else if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_RESERVED) { - LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n"); + LOGP(g_log_cat, LOGL_NOTICE, "Payload Type: RESERVED (3)\n"); return CSN_ERROR_GENERAL; } /* We can decode the message */ @@ -5696,7 +5695,7 @@ LOGPC(DLCSN1, LOGL_INFO, "\n");
if (ret > 0) { - LOGP(DRLCMACDATA, LOGL_NOTICE, "%s: Got %d remaining bits unhandled by decoder at the end of bitvec\n", msg_type_name, ret); + LOGP(g_log_cat, LOGL_NOTICE, "%s: Got %d remaining bits unhandled by decoder at the end of bitvec\n", msg_type_name, ret); ret = 0; }
@@ -5807,8 +5806,8 @@ LOGPC(DLCSN1, LOGL_INFO, "\n");
if (ret > 0 || ret == CSN_ERROR_NEED_MORE_BITS_TO_UNPACK) { - LOGP(DRLCMACDATA, LOGL_ERROR, "Failed to encode an Uplink block: not enough bits " - "in the output buffer (rc=%d)\n", ret); + LOGP(g_log_cat, LOGL_ERROR, "Failed to encode an Uplink block: not enough bits " + "in the output buffer (rc=%d)\n", ret); ret = CSN_ERROR_NEED_MORE_BITS_TO_UNPACK; }
@@ -5828,12 +5827,12 @@
if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_DATA) { - LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n"); + LOGP(g_log_cat, LOGL_NOTICE, "Payload Type: DATA (0), not implemented\n"); return CSN_ERROR_GENERAL; } else if (data->PAYLOAD_TYPE == PAYLOAD_TYPE_RESERVED) { - LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n"); + LOGP(g_log_cat, LOGL_NOTICE, "Payload Type: RESERVED (3)\n"); return CSN_ERROR_GENERAL; } /* We can encode the message */ @@ -6017,8 +6016,8 @@ LOGPC(DLCSN1, LOGL_INFO, "\n");
if (ret > 0 || ret == CSN_ERROR_NEED_MORE_BITS_TO_UNPACK) { - LOGP(DRLCMACDATA, LOGL_ERROR, "Failed to encode a Downlink block: not enough bits " - "in the output buffer (rc=%d)\n", ret); + LOGP(g_log_cat, LOGL_ERROR, "Failed to encode a Downlink block: not enough bits " + "in the output buffer (rc=%d)\n", ret); ret = CSN_ERROR_NEED_MORE_BITS_TO_UNPACK; }
@@ -6039,25 +6038,25 @@ data->CV = bitvec_read_field(vector, &readIndex, 4); data->SI = bitvec_read_field(vector, &readIndex, 1); data->R = bitvec_read_field(vector, &readIndex, 1); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "PAYLOAD_TYPE = %u ", (unsigned)(data->PAYLOAD_TYPE)); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "CV = %u ", (unsigned)(data->CV)); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "SI = %u ", (unsigned)(data->SI)); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "R = %u ", (unsigned)(data->R)); + LOGPC(g_log_cat, LOGL_NOTICE, "PAYLOAD_TYPE = %u ", (unsigned)(data->PAYLOAD_TYPE)); + LOGPC(g_log_cat, LOGL_NOTICE, "CV = %u ", (unsigned)(data->CV)); + LOGPC(g_log_cat, LOGL_NOTICE, "SI = %u ", (unsigned)(data->SI)); + LOGPC(g_log_cat, LOGL_NOTICE, "R = %u ", (unsigned)(data->R)); // Octet 1 data->spare = bitvec_read_field(vector, &readIndex, 1); data->PI = bitvec_read_field(vector, &readIndex, 1); data->TFI = bitvec_read_field(vector, &readIndex, 5); data->TI = bitvec_read_field(vector, &readIndex, 1); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "spare = %u ", (unsigned)(data->spare)); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "PI = %u ", (unsigned)(data->PI)); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "TFI = %u ", (unsigned)(data->TFI)); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "TI = %u ", (unsigned)(data->TI)); + LOGPC(g_log_cat, LOGL_NOTICE, "spare = %u ", (unsigned)(data->spare)); + LOGPC(g_log_cat, LOGL_NOTICE, "PI = %u ", (unsigned)(data->PI)); + LOGPC(g_log_cat, LOGL_NOTICE, "TFI = %u ", (unsigned)(data->TFI)); + LOGPC(g_log_cat, LOGL_NOTICE, "TI = %u ", (unsigned)(data->TI));
// Octet 2 data->BSN = bitvec_read_field(vector, &readIndex, 7); data->E_1 = bitvec_read_field(vector, &readIndex, 1); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "BSN = %u ", (unsigned)(data->BSN)); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "E_1 = %u ", (unsigned)(data->E_1)); + LOGPC(g_log_cat, LOGL_NOTICE, "BSN = %u ", (unsigned)(data->BSN)); + LOGPC(g_log_cat, LOGL_NOTICE, "E_1 = %u ", (unsigned)(data->E_1));
if (data->E_1 == 0) // Extension octet follows immediately @@ -6069,37 +6068,37 @@ data->LENGTH_INDICATOR[i] = bitvec_read_field(vector, &readIndex, 6); data->M[i] = bitvec_read_field(vector, &readIndex, 1); data->E[i] = bitvec_read_field(vector, &readIndex, 1); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "LENGTH_INDICATOR[%u] = %u ", i, (unsigned)(data->LENGTH_INDICATOR[i])); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "M[%u] = %u ", i, (unsigned)(data->M[i])); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "E[%u] = %u ", i, (unsigned)(data->E[i])); + LOGPC(g_log_cat, LOGL_NOTICE, "LENGTH_INDICATOR[%u] = %u ", i, (unsigned)(data->LENGTH_INDICATOR[i])); + LOGPC(g_log_cat, LOGL_NOTICE, "M[%u] = %u ", i, (unsigned)(data->M[i])); + LOGPC(g_log_cat, LOGL_NOTICE, "E[%u] = %u ", i, (unsigned)(data->E[i])); i++; } while((data->M[i-1] == 1)&&(data->E[i-1] == 0)); } if (data->TI == 1) // TLLI field is present { data->TLLI = bitvec_read_field(vector, &readIndex, 32); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "TLLI = %08x ", data->TLLI); + LOGPC(g_log_cat, LOGL_NOTICE, "TLLI = %08x ", data->TLLI); if (data->PI == 1) // PFI is present if TI field indicates presence of TLLI { data->PFI = bitvec_read_field(vector, &readIndex, 7); data->E_2 = bitvec_read_field(vector, &readIndex, 1); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "PFI = %u ", (unsigned)(data->PFI)); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "E_2 = %u ", (unsigned)(data->E_2)); + LOGPC(g_log_cat, LOGL_NOTICE, "PFI = %u ", (unsigned)(data->PFI)); + LOGPC(g_log_cat, LOGL_NOTICE, "E_2 = %u ", (unsigned)(data->E_2)); } } unsigned dataLen = 23 - readIndex/8; - LOGPC(DRLCMACDATA, LOGL_NOTICE, "DATA[%u] = ", dataLen); + LOGPC(g_log_cat, LOGL_NOTICE, "DATA[%u] = ", dataLen); assert(dataLen <= 20); for (i = 0; i < dataLen; i++) { data->RLC_DATA[i] = bitvec_read_field(vector, &readIndex, 8); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "%02x", (unsigned)(data->RLC_DATA[i])); + LOGPC(g_log_cat, LOGL_NOTICE, "%02x", (unsigned)(data->RLC_DATA[i])); } - LOGPC(DRLCMACDATA, LOGL_NOTICE, "\n"); + LOGPC(g_log_cat, LOGL_NOTICE, "\n"); } else { - LOGP(DRLCMACDATA, LOGL_NOTICE, "Payload Type: RESERVED (3)\n"); + LOGP(g_log_cat, LOGL_NOTICE, "Payload Type: RESERVED (3)\n"); return; } } @@ -6116,24 +6115,24 @@ bitvec_write_field(vector, &writeIndex, data->RRBP, 2); bitvec_write_field(vector, &writeIndex, data->SP, 1); bitvec_write_field(vector, &writeIndex, data->USF, 3); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "PAYLOAD_TYPE = %u ", (unsigned)(data->PAYLOAD_TYPE)); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "RRBP = %u ", (unsigned)(data->RRBP)); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "SP = %u ", (unsigned)(data->SP)); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "USF = %u ", (unsigned)(data->USF)); + LOGPC(g_log_cat, LOGL_NOTICE, "PAYLOAD_TYPE = %u ", (unsigned)(data->PAYLOAD_TYPE)); + LOGPC(g_log_cat, LOGL_NOTICE, "RRBP = %u ", (unsigned)(data->RRBP)); + LOGPC(g_log_cat, LOGL_NOTICE, "SP = %u ", (unsigned)(data->SP)); + LOGPC(g_log_cat, LOGL_NOTICE, "USF = %u ", (unsigned)(data->USF));
// Octet 1 bitvec_write_field(vector, &writeIndex, data->PR, 2); bitvec_write_field(vector, &writeIndex, data->TFI, 5); bitvec_write_field(vector, &writeIndex, data->FBI, 1); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "PR = %u ", (unsigned)(data->PR)); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "TFI = %u ", (unsigned)(data->TFI)); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "FBI = %u ", (unsigned)(data->FBI)); + LOGPC(g_log_cat, LOGL_NOTICE, "PR = %u ", (unsigned)(data->PR)); + LOGPC(g_log_cat, LOGL_NOTICE, "TFI = %u ", (unsigned)(data->TFI)); + LOGPC(g_log_cat, LOGL_NOTICE, "FBI = %u ", (unsigned)(data->FBI));
// Octet 2 bitvec_write_field(vector, &writeIndex, data->BSN, 7); bitvec_write_field(vector, &writeIndex, data->E_1, 1); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "BSN = %u ", (unsigned)(data->BSN)); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "E_1 = %u ", (unsigned)(data->E_1)); + LOGPC(g_log_cat, LOGL_NOTICE, "BSN = %u ", (unsigned)(data->BSN)); + LOGPC(g_log_cat, LOGL_NOTICE, "E_1 = %u ", (unsigned)(data->E_1));
// Octet 3 (optional) if (data->E_1 == 0) @@ -6144,22 +6143,22 @@ bitvec_write_field(vector, &writeIndex, data->LENGTH_INDICATOR[i], 6); bitvec_write_field(vector, &writeIndex, data->M[i], 1); bitvec_write_field(vector, &writeIndex, data->E[i], 1); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "LENGTH_INDICATOR[%u] = %u ", i, (unsigned)(data->LENGTH_INDICATOR[i])); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "M[%u] = %u ", i, (unsigned)(data->M[i])); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "E[%u] = %u ", i, (unsigned)(data->E[i])); + LOGPC(g_log_cat, LOGL_NOTICE, "LENGTH_INDICATOR[%u] = %u ", i, (unsigned)(data->LENGTH_INDICATOR[i])); + LOGPC(g_log_cat, LOGL_NOTICE, "M[%u] = %u ", i, (unsigned)(data->M[i])); + LOGPC(g_log_cat, LOGL_NOTICE, "E[%u] = %u ", i, (unsigned)(data->E[i])); i++; } while ((data->M[i-1] == 1) && (data->E[i-1] == 0)); } unsigned dataNumOctets = 23 - writeIndex/8; - LOGPC(DRLCMACDATA, LOGL_NOTICE, "DATA[%u] = ", dataNumOctets); + LOGPC(g_log_cat, LOGL_NOTICE, "DATA[%u] = ", dataNumOctets); assert(dataNumOctets <= 20); for (i = 0; i < dataNumOctets; i++) { bitvec_write_field(vector, &writeIndex, data->RLC_DATA[i], 8); - LOGPC(DRLCMACDATA, LOGL_NOTICE, "%02x", (unsigned)(data->RLC_DATA[i])); + LOGPC(g_log_cat, LOGL_NOTICE, "%02x", (unsigned)(data->RLC_DATA[i])); } - LOGPC(DRLCMACDATA, LOGL_NOTICE, "\n"); + LOGPC(g_log_cat, LOGL_NOTICE, "\n"); } }
@@ -6180,7 +6179,7 @@ LOGPC(DLCSN1, LOGL_INFO, "\n");
if (ret > 0) { - LOGP(DRLCMACDATA, LOGL_NOTICE, "RAcap: Got %d remaining bits unhandled by decoder at the end of bitvec\n", ret); + LOGP(g_log_cat, LOGL_NOTICE, "RAcap: Got %d remaining bits unhandled by decoder at the end of bitvec\n", ret); ret = 0; } return ret; @@ -6200,8 +6199,8 @@ LOGPC(DLCSN1, LOGL_INFO, "\n");
if (ret > 0 || ret == CSN_ERROR_NEED_MORE_BITS_TO_UNPACK) { - LOGP(DRLCMACDATA, LOGL_ERROR, "Failed to encode MS RA Capability IE: not enough bits " - "in the output buffer (rc=%d)\n", ret); + LOGP(g_log_cat, LOGL_ERROR, "Failed to encode MS RA Capability IE: not enough bits " + "in the output buffer (rc=%d)\n", ret); ret = CSN_ERROR_NEED_MORE_BITS_TO_UNPACK; }
diff --git a/src/rlcmac/misc.c b/src/rlcmac/misc.c new file mode 100644 index 0000000..0aecbfd --- /dev/null +++ b/src/rlcmac/misc.c @@ -0,0 +1,25 @@ +/* + * (C) 2022 by sysmocom - s.f.m.c. GmbH info@sysmocom.de + * Author: Vadim Yanitskiy vyanitskiy@sysmocom.de + * + * 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. + */ + +#include <osmocom/core/logging.h> + +int g_log_cat = DLGLOBAL; + +void osmo_gprs_rlcmac_set_log_cat(int cat) +{ + g_log_cat = cat; +}