};
static void lapdm_t200_cb(void *data);
-static int rslms_send_i(struct lapdm_msg_ctx *mctx);
+static int rslms_send_i(struct lapdm_msg_ctx *mctx, int line);
/* UTILITY FUNCTIONS */
/* enter multiple-frame-established state */
lapdm_dl_newstate(dl, LAPDm_STATE_MF_EST);
/* send outstanding frames, if any (resume / reconnect) */
- rslms_send_i(mctx);
+ rslms_send_i(mctx, __LINE__);
/* send notification to L3 */
rc = send_rll_simple(RSL_MT_EST_CONF, mctx);
msgb_free(msg);
}
}
/* Send message, if possible due to acknowledged data */
- rslms_send_i(mctx);
+ rslms_send_i(mctx, __LINE__);
break;
case LAPDm_S_RNR:
"received\n");
/* Send message, if possible due to acknowledged data */
- rslms_send_i(mctx);
+ rslms_send_i(mctx, __LINE__);
break;
case LAPDm_S_REJ:
/* FIXME: 5.5.4.2 2) */
/* Send message, if possible due to acknowledged data */
- rslms_send_i(mctx);
+ rslms_send_i(mctx, __LINE__);
break;
default:
/* check if we are not in own receiver busy */
if (!dl->own_busy) {
/* NOTE: V(R) is already set above */
- rc = rslms_send_i(mctx);
+ rc = rslms_send_i(mctx, __LINE__);
if (rc) {
LOGP(DLAPDM, LOGL_INFO, "we are not busy and "
"have no pending data, send RR\n");
/* Send RR with F=0 */
return lapdm_send_rr(mctx, 0);
}
+ /* all I or one RR is sent, we are done */
+ return 0;
} else {
LOGP(DLAPDM, LOGL_INFO, "we are busy, send RNR\n");
/* Send RNR with F=0 */
}
/* Send message, if possible due to acknowledged data */
- rslms_send_i(mctx);
+ rslms_send_i(mctx, __LINE__);
return rc;
}
msgb_enqueue(&dl->send_queue, msg);
/* Send message, if possible */
- rslms_send_i(&dl->mctx);
+ rslms_send_i(&dl->mctx, __LINE__);
return 0;
}
/* Send next I frame from queued/buffered data */
-static int rslms_send_i(struct lapdm_msg_ctx *mctx)
+static int rslms_send_i(struct lapdm_msg_ctx *mctx, int line)
{
struct lapdm_datalink *dl = mctx->dl;
uint8_t chan_nr = mctx->chan_nr;
int length, left;
int rc = -1; /* we sent nothing */
+ LOGP(DLAPDM, LOGL_INFO, "%s() called from line %d\n", __func__, line);
+
next_frame:
if (dl->peer_busy) {
/* put back the send-buffer to the send-queue (first position) */
if (dl->send_buffer) {
+ LOGP(DLAPDM, LOGL_INFO, "put frame in sendbuffer back to "
+ "queue\n");
llist_add(&dl->send_buffer->list, &dl->send_queue);
dl->send_buffer = NULL;
- }
+ } else
+ LOGP(DLAPDM, LOGL_INFO, "no frame in sendbuffer\n");
/* Clear transmit and send buffer, if any */
lapdm_dl_flush_tx(dl);
/* establish */
LOGP(DRR, LOGL_INFO, "establishing channel in dedicated mode\n");
rsl_dec_chan_nr(cd->chan_nr, &ch_type, &ch_subch, &ch_ts);
- LOGP(DRR, LOGL_INFO, " Channel type %d, subch %d, ts %d, mode %d\n",
- ch_type, ch_subch, ch_ts, cd->mode);
+ LOGP(DRR, LOGL_INFO, " Channel type %d, subch %d, ts %d, mode %d, "
+ "cipher %d\n", ch_type, ch_subch, ch_ts, cd->mode,
+ rr->cipher_type + 1);
if (cd->h)
l1ctl_tx_dm_est_req_h1(ms, cd->maio, cd->hsn,
ma, ma_len, cd->chan_nr, cd->tsc, cd->mode);
/* check if camping */
if (cs->state != GSM322_C3_CAMPED_NORMALLY
&& rrh->cause != RR_EST_CAUSE_EMERGENCY) {
- LOGP(DRR, LOGL_INFO, "Not camping normally, rejecting!\n");
+ LOGP(DRR, LOGL_INFO, "Not camping normally, rejecting! "
+ "(cs->state = %d)\n", cs->state);
cause = RR_REL_CAUSE_EMERGENCY_ONLY;
goto reject;
}
if (cs->state != GSM322_C3_CAMPED_NORMALLY
&& cs->state != GSM322_C7_CAMPED_ANY_CELL) {
- LOGP(DRR, LOGL_INFO, "Not camping, rejecting!\n");
+ LOGP(DRR, LOGL_INFO, "Not camping, rejecting! "
+ "(cs->state = %d)\n", cs->state);
cause = RR_REL_CAUSE_TRY_LATER;
goto reject;
}