pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/libosmo-gprs/+/31755 )
Change subject: rlcmac: Move create_pkt_ctrl_ack() to tbf base class
......................................................................
rlcmac: Move create_pkt_ctrl_ack() to tbf base class
The code to generate a PKT CTRL ACK is the same for a DL TBF and an UL
TBF.
Move it to the generic base class in order to be able to generate it for
a DL TBF in a follow up patch.
Change-Id: I767696b445842ebc32b35c320273b13f63076ca4
---
M include/osmocom/gprs/rlcmac/tbf.h
M include/osmocom/gprs/rlcmac/tbf_ul.h
M src/rlcmac/sched.c
M src/rlcmac/tbf.c
M src/rlcmac/tbf_ul.c
5 files changed, 68 insertions(+), 38 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-gprs refs/changes/55/31755/1
diff --git a/include/osmocom/gprs/rlcmac/tbf.h b/include/osmocom/gprs/rlcmac/tbf.h
index 2886c83..83a887d 100644
--- a/include/osmocom/gprs/rlcmac/tbf.h
+++ b/include/osmocom/gprs/rlcmac/tbf.h
@@ -27,3 +27,14 @@
void gprs_rlcmac_tbf_destructor(struct gprs_rlcmac_tbf *tbf);
void gprs_rlcmac_tbf_free(struct gprs_rlcmac_tbf *tbf);
+
+struct msgb *gprs_rlcmac_tbf_create_pkt_ctrl_ack(const struct gprs_rlcmac_tbf *tbf);
+
+#define LOGPTBF(tbf, lvl, fmt, args...) \
+ LOGP(g_rlcmac_log_cat[tbf->direction == GPRS_RLCMAC_TBF_DIR_DL ? \
+ OSMO_GPRS_RLCMAC_LOGC_TBFDL : \
+ OSMO_GPRS_RLCMAC_LOGC_TBFUL], \
+ lvl, "TBF(%s:NR-%" PRIu8 ":TLLI-%08x) " fmt, \
+ tbf->direction == GPRS_RLCMAC_TBF_DIR_DL ? "DL" : "UL", \
+ tbf->nr, tbf->gre->tlli, \
+ ## args)
diff --git a/include/osmocom/gprs/rlcmac/tbf_ul.h b/include/osmocom/gprs/rlcmac/tbf_ul.h
index ab85f50..e5cfa91 100644
--- a/include/osmocom/gprs/rlcmac/tbf_ul.h
+++ b/include/osmocom/gprs/rlcmac/tbf_ul.h
@@ -54,7 +54,6 @@
struct msgb *gprs_rlcmac_ul_tbf_data_create(struct gprs_rlcmac_ul_tbf *ul_tbf, const
struct gprs_rlcmac_rts_block_ind *bi);
struct msgb *gprs_rlcmac_ul_tbf_dummy_create(const struct gprs_rlcmac_ul_tbf *ul_tbf);
-struct msgb *gprs_rlcmac_ul_tbf_create_pkt_ctrl_ack(const struct gprs_rlcmac_ul_tbf
*ul_tbf);
int gprs_rlcmac_ul_tbf_handle_pkt_ul_ack_nack(struct gprs_rlcmac_ul_tbf *ul_tbf,
const RlcMacDownlink_t *dl_block);
diff --git a/src/rlcmac/sched.c b/src/rlcmac/sched.c
index 0431631..2630940 100644
--- a/src/rlcmac/sched.c
+++ b/src/rlcmac/sched.c
@@ -198,13 +198,13 @@
if (tbfs->poll_ul_ack) {
LOGRLCMAC(LOGL_DEBUG, "(ts=%u,fn=%u,usf=%u) Tx Pkt Control Ack (UL ACK/NACK
poll)\n",
bi->ts, bi->fn, bi->usf);
- msg = gprs_rlcmac_ul_tbf_create_pkt_ctrl_ack(tbfs->poll_ul_ack);
+ msg = gprs_rlcmac_tbf_create_pkt_ctrl_ack(ul_tbf_as_tbf(tbfs->poll_ul_ack));
/* Last UL message, freeing */
gprs_rlcmac_ul_tbf_free(tbfs->poll_ul_ack);
return msg;
}
if (tbfs->poll_ul_ass) {
- msg = gprs_rlcmac_ul_tbf_create_pkt_ctrl_ack(tbfs->poll_ul_ass);
+ msg = gprs_rlcmac_tbf_create_pkt_ctrl_ack(ul_tbf_as_tbf(tbfs->poll_ul_ass));
if (msg)
return msg;
}
diff --git a/src/rlcmac/tbf.c b/src/rlcmac/tbf.c
index ea15d69..c18ad83 100644
--- a/src/rlcmac/tbf.c
+++ b/src/rlcmac/tbf.c
@@ -19,8 +19,14 @@
*
*/
+#include <osmocom/core/bitvec.h>
+#include <osmocom/core/msgb.h>
+#include <osmocom/gsm/protocol/gsm_04_08.h>
+
#include <osmocom/gprs/rlcmac/tbf.h>
#include <osmocom/gprs/rlcmac/tbf_ul.h>
+#include <osmocom/gprs/rlcmac/gre.h>
+#include <osmocom/gprs/rlcmac/rlcmac_enc.h>
void gprs_rlcmac_tbf_constructor(struct gprs_rlcmac_tbf *tbf,
enum gprs_rlcmac_tbf_direction direction,
@@ -41,3 +47,38 @@
gprs_rlcmac_ul_tbf_free(tbf_as_ul_tbf(tbf));
/* else: TODO dl_tbf not yet implemented */
}
+
+struct msgb *gprs_rlcmac_tbf_create_pkt_ctrl_ack(const struct gprs_rlcmac_tbf *tbf)
+{
+ struct msgb *msg;
+ struct bitvec bv;
+ RlcMacUplink_t ul_block;
+ int rc;
+
+ OSMO_ASSERT(tbf);
+
+ msg = msgb_alloc(GSM_MACBLOCK_LEN, "pkt_ctrl_ack");
+ if (!msg)
+ return NULL;
+
+ /* Initialize a bit vector that uses allocated msgb as the data buffer. */
+ bv = (struct bitvec){
+ .data = msgb_put(msg, GSM_MACBLOCK_LEN),
+ .data_len = GSM_MACBLOCK_LEN,
+ };
+ bitvec_unhex(&bv, GPRS_RLCMAC_DUMMY_VEC);
+
+ gprs_rlcmac_enc_prepare_pkt_ctrl_ack(&ul_block, tbf->gre->tlli);
+ rc = osmo_gprs_rlcmac_encode_uplink(&bv, &ul_block);
+ if (rc < 0) {
+ LOGPTBF(tbf, LOGL_ERROR, "Encoding of Packet Control ACK failed (%d)\n",
rc);
+ goto free_ret;
+ }
+ LOGPTBF(tbf, LOGL_DEBUG, "Tx Packet Control Ack\n");
+
+ return msg;
+
+free_ret:
+ msgb_free(msg);
+ return NULL;
+}
diff --git a/src/rlcmac/tbf_ul.c b/src/rlcmac/tbf_ul.c
index fcd7f56..143c880 100644
--- a/src/rlcmac/tbf_ul.c
+++ b/src/rlcmac/tbf_ul.c
@@ -310,41 +310,6 @@
return NULL;
}
-struct msgb *gprs_rlcmac_ul_tbf_create_pkt_ctrl_ack(const struct gprs_rlcmac_ul_tbf
*ul_tbf)
-{
- struct msgb *msg;
- struct bitvec bv;
- RlcMacUplink_t ul_block;
- int rc;
-
- OSMO_ASSERT(ul_tbf);
-
- msg = msgb_alloc(GSM_MACBLOCK_LEN, "pkt_ctrl_ack");
- if (!msg)
- return NULL;
-
- /* Initialize a bit vector that uses allocated msgb as the data buffer. */
- bv = (struct bitvec){
- .data = msgb_put(msg, GSM_MACBLOCK_LEN),
- .data_len = GSM_MACBLOCK_LEN,
- };
- bitvec_unhex(&bv, GPRS_RLCMAC_DUMMY_VEC);
-
- gprs_rlcmac_enc_prepare_pkt_ctrl_ack(&ul_block, ul_tbf->tbf.gre->tlli);
- rc = osmo_gprs_rlcmac_encode_uplink(&bv, &ul_block);
- if (rc < 0) {
- LOGPTBFUL(ul_tbf, LOGL_ERROR, "Encoding of Packet Control ACK failed (%d)\n",
rc);
- goto free_ret;
- }
- LOGPTBFUL(ul_tbf, LOGL_DEBUG, "Tx Packet Control Ack\n");
-
- return msg;
-
-free_ret:
- msgb_free(msg);
- return NULL;
-}
-
bool gprs_rlcmac_ul_tbf_have_data(const struct gprs_rlcmac_ul_tbf *ul_tbf)
{
return (ul_tbf->llc_tx_msg && msgb_length(ul_tbf->llc_tx_msg) > 0) ||
--
To view, visit
https://gerrit.osmocom.org/c/libosmo-gprs/+/31755
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: libosmo-gprs
Gerrit-Branch: master
Gerrit-Change-Id: I767696b445842ebc32b35c320273b13f63076ca4
Gerrit-Change-Number: 31755
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: newchange