rsl_rll_error(RLL_CAUSE_T200_EXPIRED, &dl->mctx);
/* flush tx buffers */
lapdm_dl_flush_tx(dl);
+ lapdm_dl_flush_send(dl);
/* go back to idle state */
lapdm_dl_newstate(dl, LAPDm_STATE_IDLE);
/* NOTE: we must not change any other states or buffers
/* reset Timer T200 */
osmo_timer_del(&dl->t200);
/* go to idle state */
+ lapdm_dl_flush_tx(dl);
+ lapdm_dl_flush_send(dl);
lapdm_dl_newstate(dl, LAPDm_STATE_IDLE);
rc = send_rll_simple(RSL_MT_REL_CONF, mctx);
msgb_free(msg);
/* reset Timer T200 */
osmo_timer_del(&dl->t200);
/* enter idle state */
+ lapdm_dl_flush_tx(dl);
+ lapdm_dl_flush_send(dl);
lapdm_dl_newstate(dl, LAPDm_STATE_IDLE);
/* send notification to L3 */
rc = send_rll_simple(rsl_msg, mctx);
/* reset Timer T200 */
osmo_timer_del(&dl->t200);
/* go to idle state */
+ lapdm_dl_flush_tx(dl);
+ lapdm_dl_flush_send(dl);
lapdm_dl_newstate(dl, LAPDm_STATE_IDLE);
rc = send_rll_simple(RSL_MT_REL_CONF, mctx);
msgb_free(msg);
rc = send_rll_simple(RSL_MT_REL_IND, mctx);
msgb_free(msg);
/* go to idle state */
+ lapdm_dl_flush_tx(dl);
+ lapdm_dl_flush_send(dl);
lapdm_dl_newstate(dl, LAPDm_STATE_IDLE);
return 0;
}
rc = send_rll_simple(RSL_MT_REL_IND, mctx);
msgb_free(msg);
/* go to idle state */
+ lapdm_dl_flush_tx(dl);
+ lapdm_dl_flush_send(dl);
lapdm_dl_newstate(dl, LAPDm_STATE_IDLE);
return 0;
}
sapi = 0;
} else {
if (mctx.link_id & 0x40) {
- /* It was received from network on SACCH, thus
- * lapdm_fmt must be B4 */
- mctx.lapdm_fmt = LAPDm_FMT_B4;
- mctx.n201 = N201_B4;
- LOGP(DLLAPDM, LOGL_INFO, "fmt=B4\n");
+ /* It was received from network on SACCH */
+
+ /* If sent by BTS, lapdm_fmt must be B4 */
+ if (le->mode == LAPDM_MODE_MS) {
+ mctx.lapdm_fmt = LAPDm_FMT_B4;
+ mctx.n201 = N201_B4;
+ LOGP(DLLAPDM, LOGL_INFO, "fmt=B4\n");
+ } else {
+ mctx.lapdm_fmt = LAPDm_FMT_B;
+ mctx.n201 = N201_AB_SACCH;
+ LOGP(DLLAPDM, LOGL_INFO, "fmt=B\n");
+ }
/* SACCH frames have a two-byte L1 header that
* OsmocomBB L1 doesn't strip */
mctx.tx_power_ind = msg->l2h[0] & 0x1f;