mirror of https://gerrit.osmocom.org/libosmocore
LAPDm: Add a flag to enable suppression of subsequent REJ frame
This behaviour was default in earlier versions of LAPDm/LAPD. Because it is only required for osmocom-bb, a flag is added to enable it there. Related: OS#5969 Change-Id: I93994dbbd1fc2c9edb8f3015c6b18ecd0fce0565
This commit is contained in:
parent
f51f916e1c
commit
bd2b897b72
|
@ -50,6 +50,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_EMPTY_FRAME 0x0001
|
||||||
#define LAPDM_ENT_F_POLLING_ONLY 0x0002
|
#define LAPDM_ENT_F_POLLING_ONLY 0x0002
|
||||||
|
#define LAPDM_ENT_F_DROP_2ND_REJ 0x0004
|
||||||
|
|
||||||
/*! a LAPDm Entity */
|
/*! a LAPDm Entity */
|
||||||
struct lapdm_entity {
|
struct lapdm_entity {
|
||||||
|
|
|
@ -86,6 +86,7 @@ enum lapd_state {
|
||||||
|
|
||||||
/*! lapd_flags */
|
/*! lapd_flags */
|
||||||
#define LAPD_F_RTS 0x0001
|
#define LAPD_F_RTS 0x0001
|
||||||
|
#define LAPD_F_DROP_2ND_REJ 0x0002
|
||||||
|
|
||||||
/*! LAPD T200 state in RTS mode */
|
/*! LAPD T200 state in RTS mode */
|
||||||
enum lapd_t200_rts {
|
enum lapd_t200_rts {
|
||||||
|
|
|
@ -1637,6 +1637,8 @@ void lapdm_entity_set_flags(struct lapdm_entity *le, unsigned int flags)
|
||||||
/* Set flags at LAPD. */
|
/* Set flags at LAPD. */
|
||||||
if (le->flags & LAPDM_ENT_F_POLLING_ONLY)
|
if (le->flags & LAPDM_ENT_F_POLLING_ONLY)
|
||||||
dl_flags |= LAPD_F_RTS;
|
dl_flags |= LAPD_F_RTS;
|
||||||
|
if (le->flags & LAPDM_ENT_F_DROP_2ND_REJ)
|
||||||
|
dl_flags |= LAPD_F_DROP_2ND_REJ;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(le->datalink); i++) {
|
for (i = 0; i < ARRAY_SIZE(le->datalink); i++) {
|
||||||
dl = &le->datalink[i];
|
dl = &le->datalink[i];
|
||||||
|
|
|
@ -1633,9 +1633,8 @@ static int lapd_rx_i(struct msgb *msg, struct lapd_msg_ctx *lctx)
|
||||||
ns, dl->v_recv, lapd_state_name(dl->state));
|
ns, dl->v_recv, lapd_state_name(dl->state));
|
||||||
/* discard data */
|
/* discard data */
|
||||||
msgb_free(msg);
|
msgb_free(msg);
|
||||||
if (dl->seq_err_cond != 1) {
|
/* Send reject, but suppress second reject if LAPD_F_DROP_2ND_REJ flag is set. */
|
||||||
/* FIXME: help me understand what exactly todo here
|
if (dl->seq_err_cond != 1 || !(dl->lapd_flags & LAPD_F_DROP_2ND_REJ)) {
|
||||||
*/
|
|
||||||
dl->seq_err_cond = 1;
|
dl->seq_err_cond = 1;
|
||||||
lapd_send_rej(lctx, lctx->p_f);
|
lapd_send_rej(lctx, lctx->p_f);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue