aboutsummaryrefslogtreecommitdiffstats
path: root/src/gprs_rlcmac_sched.cpp
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2017-08-31 15:42:06 +0200
committerMax <msuraev@sysmocom.de>2017-09-01 11:08:06 +0200
commit8bfa659087756056cc6c131d27c88807787f7c05 (patch)
tree79c6928d7c3d576a737c080ec0b7954ac6371949 /src/gprs_rlcmac_sched.cpp
parent84bf0faed9912ba2b31e56299f5a0441973076eb (diff)
Move gsmtap and accounting into separate function
Diffstat (limited to 'src/gprs_rlcmac_sched.cpp')
-rw-r--r--src/gprs_rlcmac_sched.cpp44
1 files changed, 31 insertions, 13 deletions
diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp
index 42f03084..e059ae16 100644
--- a/src/gprs_rlcmac_sched.cpp
+++ b/src/gprs_rlcmac_sched.cpp
@@ -307,6 +307,34 @@ static struct msgb *sched_dummy(void)
return msg;
}
+static inline void tap_n_acc(const struct msgb *msg, const struct gprs_rlcmac_bts *bts, uint8_t trx, uint8_t ts,
+ uint32_t fn, enum pcu_gsmtap_category cat)
+{
+ if (!msg)
+ return;
+
+ switch(cat) {
+ case PCU_GSMTAP_C_DL_CTRL:
+ bts->bts->rlc_sent_control();
+ bts->bts->send_gsmtap(PCU_GSMTAP_C_DL_CTRL, false, trx, ts, GSMTAP_CHANNEL_PACCH, fn, msg->data,
+ msg->len);
+ break;
+ case PCU_GSMTAP_C_DL_DATA_GPRS:
+ bts->bts->rlc_sent();
+ /* FIXME: distinguish between GPRS and EGPRS */
+ bts->bts->send_gsmtap(PCU_GSMTAP_C_DL_DATA_GPRS, false, trx, ts, GSMTAP_CHANNEL_PDTCH, fn, msg->data,
+ msg->len);
+ break;
+ case PCU_GSMTAP_C_DL_DUMMY:
+ bts->bts->rlc_sent_dummy();
+ bts->bts->send_gsmtap(PCU_GSMTAP_C_DL_DUMMY, false, trx, ts, GSMTAP_CHANNEL_PACCH, fn, msg->data,
+ msg->len);
+ break;
+ default:
+ break;
+ }
+}
+
int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_bts *bts,
uint8_t trx, uint8_t ts,
uint32_t fn, uint8_t block_nr)
@@ -356,29 +384,19 @@ int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_bts *bts,
/* Prio 1: select control message */
msg = sched_select_ctrl_msg(trx, ts, fn, block_nr, pdch, ul_ass_tbf,
dl_ass_tbf, ul_ack_tbf);
- if (msg) {
- bts->bts->rlc_sent_control();
- bts->bts->send_gsmtap(PCU_GSMTAP_C_DL_CTRL, false, trx, ts, GSMTAP_CHANNEL_PACCH, fn, msg->data, msg->len);
- }
+ tap_n_acc(msg, bts, trx, ts, fn, PCU_GSMTAP_C_DL_CTRL);
/* Prio 2: select data message for downlink */
if (!msg) {
msg = sched_select_downlink(bts, trx, ts, fn, block_nr, pdch);
- if (msg) {
- bts->bts->rlc_sent();
- /* FIXME: distinguish between GPRS and EGPRS */
- bts->bts->send_gsmtap(PCU_GSMTAP_C_DL_DATA_GPRS, false, trx, ts, GSMTAP_CHANNEL_PDTCH, fn, msg->data, msg->len);
- }
+ tap_n_acc(msg, bts, trx, ts, fn, PCU_GSMTAP_C_DL_DATA_GPRS);
}
/* Prio 3: send dummy contol message */
if (!msg) {
/* increase counter */
msg = sched_dummy();
- if (msg) {
- bts->bts->rlc_sent_dummy();
- bts->bts->send_gsmtap(PCU_GSMTAP_C_DL_DUMMY, false, trx, ts, GSMTAP_CHANNEL_PACCH, fn, msg->data, msg->len);
- }
+ tap_n_acc(msg, bts, trx, ts, fn, PCU_GSMTAP_C_DL_DUMMY);
}
if (!msg)