mirror of https://gerrit.osmocom.org/libosmocore
lapdm: Allow SABM L=0 in Timer Recovery State
3GPP TS 44.006 8.6.3 "Procedures for re-establishment" is quite explicit: """ When the data link layer receives in the multiple frame established state or !!!timer recovery state!!! a DL-ESTABLISH- REQUEST primitive from layer 3 or an SABM (with L=0), the normal establishment procedure of sub-clause 8.4.1.2 shall be initiated. """ If L>0 in that state, send a DM as stated in 8.4.1.2: """ If the data link layer entity is unable to enter the multiple-frame-established state, it shall respond to the SABM command with a DM response with the F bit set to the same binary value as the P bit in the received SABM command. """ Related: OS#4549 Related: OS#4819 Change-Id: I7959dc39f883cd5c56c36a21176a2401838d7b62
This commit is contained in:
parent
d5f7147419
commit
76190d308d
|
@ -849,6 +849,23 @@ static int lapd_rx_u_sabm(struct msgb *msg, struct lapd_msg_ctx *lctx)
|
|||
switch (dl->state) {
|
||||
case LAPD_STATE_IDLE:
|
||||
break;
|
||||
case LAPD_STATE_TIMER_RECOV:
|
||||
LOGDL(dl, LOGL_INFO, "SABM command, timer recovery state\n");
|
||||
/* If link is lost on the remote side, we start over
|
||||
* and send DL-ESTABLISH indication again. */
|
||||
/* 3GPP TS 44.006 8.6.3 "Procedures for re-establishment" */
|
||||
if (length) {
|
||||
/* check for contention resoultion */
|
||||
LOGDL(dl, LOGL_ERROR, "SABM L>0 not expected in timer "
|
||||
"recovery state\n");
|
||||
mdl_error(MDL_CAUSE_SABM_INFO_NOTALL, lctx);
|
||||
lapd_send_dm(lctx);
|
||||
msgb_free(msg);
|
||||
return 0;
|
||||
}
|
||||
/* re-establishment, continue below */
|
||||
lapd_stop_t200(dl);
|
||||
break;
|
||||
case LAPD_STATE_MF_EST:
|
||||
LOGDL(dl, LOGL_INFO, "SABM command, multiple frame established state\n");
|
||||
/* If link is lost on the remote side, we start over
|
||||
|
|
Loading…
Reference in New Issue