aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2022-10-27 15:19:39 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2022-10-28 15:14:44 +0200
commitbd1f01fd2770c893592f94c5449a9c23b5871c63 (patch)
treed7c66e8142fd6570b54b52ff0f9fdb7b91ad98d2
parent29b9f94cacc86a808f6a7ef978bdc7071d5c5b54 (diff)
Fix mess with struct tbf types passed to LOGPTBF macro
It is quite common in all osmo-pcu code to have to convert between parent class "tbf" and children "dl_tbf"/"ul_tbf", or other way around. This commit adds new helper static inline functions to cast between those while doing type checks. This is used by new LOGPTBFDL and LOGPTBFUL macros to now expect the proper subclass and cast securely inside the macro itself, hence sparing all code calling those macros to have to cast explicitly the pointer to the parent "tbf" class. Change-Id: I7e4489ad4b93c9c8442213947e53c10b61fdc5e9
-rw-r--r--src/gprs_ms.c4
-rw-r--r--src/nacc_fsm.c5
-rw-r--r--src/tbf.cpp2
-rw-r--r--src/tbf_dl.h12
-rw-r--r--src/tbf_dl_ass_fsm.c2
-rw-r--r--src/tbf_ul.h12
-rw-r--r--src/tbf_ul_ack_fsm.c10
-rw-r--r--src/tbf_ul_ass_fsm.c2
8 files changed, 35 insertions, 14 deletions
diff --git a/src/gprs_ms.c b/src/gprs_ms.c
index f552d938..df1c9be5 100644
--- a/src/gprs_ms.c
+++ b/src/gprs_ms.c
@@ -96,7 +96,7 @@ static void ms_llc_timer_cb(void *_ms)
if (tbf_state((const struct gprs_rlcmac_tbf *)dl_tbf) != TBF_ST_FLOW)
return;
- LOGPTBFDL((const struct gprs_rlcmac_tbf *)dl_tbf, LOGL_DEBUG, "LLC receive timeout, requesting DL ACK\n");
+ LOGPTBFDL(dl_tbf, LOGL_DEBUG, "LLC receive timeout, requesting DL ACK\n");
tbf_dl_request_dl_ack(dl_tbf);
}
@@ -1042,7 +1042,7 @@ int ms_append_llc_dl_data(struct GprsMs *ms, uint16_t pdu_delay_csec, const uint
dl_tbf = ms_dl_tbf(ms);
if (dl_tbf && tbf_state((const struct gprs_rlcmac_tbf *)dl_tbf) == TBF_ST_WAIT_RELEASE) {
- LOGPTBFDL((const struct gprs_rlcmac_tbf *)dl_tbf, LOGL_DEBUG, "in WAIT RELEASE state (T3193), so reuse TBF\n");
+ LOGPTBFDL(dl_tbf, LOGL_DEBUG, "in WAIT RELEASE state (T3193), so reuse TBF\n");
tbf_establish_dl_tbf_on_pacch((struct gprs_rlcmac_tbf *)dl_tbf);
}
diff --git a/src/nacc_fsm.c b/src/nacc_fsm.c
index 2c321c74..25e7cd86 100644
--- a/src/nacc_fsm.c
+++ b/src/nacc_fsm.c
@@ -203,8 +203,9 @@ static struct msgb *create_packet_cell_chg_continue(const struct nacc_fsm_ctx *c
rate_ctr_inc(rate_ctr_group_get_ctr(bts_rate_counters(ms->bts), CTR_PKT_CELL_CHG_CONTINUE));
talloc_free(mac_control_block);
tbf_set_polling(tbf, *new_poll_fn, data->ts, PDCH_ULC_POLL_CELL_CHG_CONTINUE);
- LOGPTBFDL(tbf, LOGL_DEBUG, "Scheduled 'Packet Cell Change Continue' polling on PACCH (FN=%d, TS=%d)\n",
- *new_poll_fn, data->ts);
+ LOGPTBF(tbf, LOGL_DEBUG,
+ "Scheduled 'Packet Cell Change Continue' polling on PACCH (FN=%d, TS=%d)\n",
+ *new_poll_fn, data->ts);
return msg;
free_ret:
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 65980671..7094d401 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -535,7 +535,7 @@ void gprs_rlcmac_tbf::set_polling(uint32_t new_poll_fn, uint8_t ts, enum pdch_ul
{
/* schedule polling */
if (pdch_ulc_reserve_tbf_poll(trx->pdch[ts].ulc, new_poll_fn, this, reason) < 0)
- LOGPTBFDL(this, LOGL_ERROR, "Failed scheduling poll on PACCH (FN=%d, TS=%d)\n",
+ LOGPTBF(this, LOGL_ERROR, "Failed scheduling poll on PACCH (FN=%d, TS=%d)\n",
new_poll_fn, ts);
}
diff --git a/src/tbf_dl.h b/src/tbf_dl.h
index 620cccf2..8160cf3a 100644
--- a/src/tbf_dl.h
+++ b/src/tbf_dl.h
@@ -141,7 +141,17 @@ int dl_tbf_handle(struct gprs_rlcmac_bts *bts,
void tbf_dl_trigger_ass(struct gprs_rlcmac_dl_tbf *tbf, struct gprs_rlcmac_tbf *old_tbf);
void tbf_dl_request_dl_ack(struct gprs_rlcmac_dl_tbf *tbf);
-#define LOGPTBFDL(tbf, level, fmt, args...) LOGP(DTBFDL, level, "%s " fmt, tbf_name(tbf), ## args)
+static inline struct gprs_rlcmac_tbf *dl_tbf_as_tbf(struct gprs_rlcmac_dl_tbf *dl_tbf)
+{
+ return (struct gprs_rlcmac_tbf *)dl_tbf;
+}
+
+static inline const struct gprs_rlcmac_tbf *dl_tbf_as_tbf_const(const struct gprs_rlcmac_dl_tbf *dl_tbf)
+{
+ return (const struct gprs_rlcmac_tbf *)dl_tbf;
+}
+
+#define LOGPTBFDL(dl_tbf, level, fmt, args...) LOGP(DTBFDL, level, "%s " fmt, tbf_name(dl_tbf_as_tbf_const(dl_tbf)), ## args)
#ifdef __cplusplus
}
#endif
diff --git a/src/tbf_dl_ass_fsm.c b/src/tbf_dl_ass_fsm.c
index 9ea216c2..37c5a1b6 100644
--- a/src/tbf_dl_ass_fsm.c
+++ b/src/tbf_dl_ass_fsm.c
@@ -114,7 +114,7 @@ struct msgb *create_packet_dl_assign(const struct tbf_dl_ass_fsm_ctx *ctx,
bts_do_rate_ctr_inc(ms->bts, CTR_PKT_DL_ASSIGNMENT);
tbf_set_polling(ctx->tbf, new_poll_fn, d->ts, PDCH_ULC_POLL_DL_ASS);
- LOGPTBFDL(ctx->tbf, LOGL_INFO, "Scheduled DL Assignment polling on PACCH (FN=%d, TS=%d)\n",
+ LOGPTBF(ctx->tbf, LOGL_INFO, "Scheduled DL Assignment polling on PACCH (FN=%d, TS=%d)\n",
new_poll_fn, d->ts);
talloc_free(mac_control_block);
diff --git a/src/tbf_ul.h b/src/tbf_ul.h
index 62b94567..d69220d6 100644
--- a/src/tbf_ul.h
+++ b/src/tbf_ul.h
@@ -143,7 +143,17 @@ bool ul_tbf_contention_resolution_done(const struct gprs_rlcmac_ul_tbf *tbf);
struct osmo_fsm_inst *tbf_ul_ack_fi(const struct gprs_rlcmac_ul_tbf *tbf);
void ul_tbf_contention_resolution_success(struct gprs_rlcmac_ul_tbf *tbf);
-#define LOGPTBFUL(tbf, level, fmt, args...) LOGP(DTBFUL, level, "%s " fmt, tbf_name(tbf), ## args)
+static inline struct gprs_rlcmac_tbf *ul_tbf_as_tbf(struct gprs_rlcmac_ul_tbf *ul_tbf)
+{
+ return (struct gprs_rlcmac_tbf *)ul_tbf;
+}
+
+static inline const struct gprs_rlcmac_tbf *ul_tbf_as_tbf_const(const struct gprs_rlcmac_ul_tbf *ul_tbf)
+{
+ return (const struct gprs_rlcmac_tbf *)ul_tbf;
+}
+
+#define LOGPTBFUL(ul_tbf, level, fmt, args...) LOGP(DTBFUL, level, "%s " fmt, tbf_name(ul_tbf_as_tbf_const(ul_tbf)), ## args)
#ifdef __cplusplus
}
#endif
diff --git a/src/tbf_ul_ack_fsm.c b/src/tbf_ul_ack_fsm.c
index 2ccc4934..0faf21e7 100644
--- a/src/tbf_ul_ack_fsm.c
+++ b/src/tbf_ul_ack_fsm.c
@@ -89,9 +89,9 @@ static struct msgb *create_ul_ack_nack(const struct tbf_ul_ack_fsm_ctx *ctx,
if (final) {
tbf_set_polling(tbf, new_poll_fn, d->ts, PDCH_ULC_POLL_UL_ACK);
- LOGPTBFUL(tbf, LOGL_DEBUG,
- "Scheduled UL Acknowledgement polling on PACCH (FN=%d, TS=%d)\n",
- new_poll_fn, d->ts);
+ LOGPTBF(tbf, LOGL_DEBUG,
+ "Scheduled UL Acknowledgement polling on PACCH (FN=%d, TS=%d)\n",
+ new_poll_fn, d->ts);
}
return msg;
@@ -111,7 +111,7 @@ static void st_none(struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void st_sched_ul_ack(struct osmo_fsm_inst *fi, uint32_t event, void *data)
{
struct tbf_ul_ack_fsm_ctx *ctx = (struct tbf_ul_ack_fsm_ctx *)fi->priv;
- struct gprs_rlcmac_tbf *tbf = (struct gprs_rlcmac_tbf *)ctx->tbf;
+ struct gprs_rlcmac_ul_tbf *tbf = ctx->tbf;
struct tbf_ul_ack_ev_create_rlcmac_msg_ctx *data_ctx;
bool final;
@@ -122,7 +122,7 @@ static void st_sched_ul_ack(struct osmo_fsm_inst *fi, uint32_t event, void *data
break;
case TBF_UL_ACK_EV_CREATE_RLCMAC_MSG:
data_ctx = (struct tbf_ul_ack_ev_create_rlcmac_msg_ctx *)data;
- final = tbf_state(tbf) == TBF_ST_FINISHED;
+ final = tbf_state(ul_tbf_as_tbf(tbf)) == TBF_ST_FINISHED;
data_ctx->msg = create_ul_ack_nack(ctx, data_ctx, final);
if (!data_ctx->msg)
return;
diff --git a/src/tbf_ul_ass_fsm.c b/src/tbf_ul_ass_fsm.c
index b443e4f4..ee5f6819 100644
--- a/src/tbf_ul_ass_fsm.c
+++ b/src/tbf_ul_ass_fsm.c
@@ -129,7 +129,7 @@ struct msgb *create_packet_ul_assign(const struct tbf_ul_ass_fsm_ctx *ctx,
bts_do_rate_ctr_inc(ms->bts, CTR_PKT_UL_ASSIGNMENT);
tbf_set_polling(ctx->tbf, new_poll_fn, d->ts, PDCH_ULC_POLL_UL_ASS);
- LOGPTBFUL(ctx->tbf, LOGL_INFO, "Scheduled UL Assignment polling on PACCH (FN=%d, TS=%d)\n",
+ LOGPTBF(ctx->tbf, LOGL_INFO, "Scheduled UL Assignment polling on PACCH (FN=%d, TS=%d)\n",
new_poll_fn, d->ts);
talloc_free(mac_control_block);