Add flag to enable RTS based polling

RTS based polling in LAPDm code is disabled by default. Make libosmogsm
stay compatible with existing applications that do not use RTS based
polling.

This patch fixes the issue that LAPDM_ENT_F_POLLING_ONLY did enable RTS
based polling too, which breaks existing applications like older
versions of osmo-bts.

Change-Id: I2a75c192bbc24e85bfc1656b2be21cea7a92814a
This commit is contained in:
Andreas Eversberg 2023-11-29 12:03:00 +01:00
parent 5560c040bd
commit 285f3693de
2 changed files with 6 additions and 5 deletions

View File

@ -51,6 +51,7 @@ typedef int (*lapdm_cb_t)(struct msgb *msg, struct lapdm_entity *le, void *ctx);
#define LAPDM_ENT_F_EMPTY_FRAME 0x0001
#define LAPDM_ENT_F_POLLING_ONLY 0x0002
#define LAPDM_ENT_F_DROP_2ND_REJ 0x0004
#define LAPDM_ENT_F_RTS 0x0008
/*! a LAPDm Entity */
struct lapdm_entity {

View File

@ -363,8 +363,8 @@ static int tx_ph_data_enqueue(struct lapdm_datalink *dl, struct msgb *msg,
if (le->tx_pending || le->flags & LAPDM_ENT_F_POLLING_ONLY) {
struct msgb *old_msg;
/* In 'Polling only' mode there can be only one message. */
if (le->flags & LAPDM_ENT_F_POLLING_ONLY) {
/* In 'RTS' mode there can be only one message. */
if (le->flags & LAPDM_ENT_F_RTS) {
/* Overwrite existing message by removing it first. */
if ((old_msg = msgb_dequeue(&dl->dl.tx_queue))) {
msgb_free(old_msg);
@ -424,8 +424,8 @@ static struct msgb *tx_dequeue_msgb(struct lapdm_datalink *dl, uint32_t fn)
{
struct msgb *msg;
/* Call RTS function of LAPD, to poll next frame. */
if (dl->entity->flags & LAPDM_ENT_F_POLLING_ONLY) {
/* Call RTS function of LAPD, to queue next frame. */
if (dl->entity->flags & LAPDM_ENT_F_RTS) {
struct lapd_msg_ctx lctx;
int rc;
@ -1635,7 +1635,7 @@ void lapdm_entity_set_flags(struct lapdm_entity *le, unsigned int flags)
le->flags = flags;
/* Set flags at LAPD. */
if (le->flags & LAPDM_ENT_F_POLLING_ONLY)
if (le->flags & LAPDM_ENT_F_RTS)
dl_flags |= LAPD_F_RTS;
if (le->flags & LAPDM_ENT_F_DROP_2ND_REJ)
dl_flags |= LAPD_F_DROP_2ND_REJ;