pespin has submitted this change. ( 
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(-)

Approvals:
  fixeria: Looks good to me, but someone else must approve
  Jenkins Builder: Verified
  laforge: Looks good to me, approved




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: 2
Gerrit-Owner: pespin <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to