aboutsummaryrefslogtreecommitdiffstats
path: root/src/gsm/lapd_core.c
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2013-04-07 20:17:30 +0200
committerHolger Hans Peter Freyther <zecke@selfish.org>2013-04-07 20:17:30 +0200
commite1f164dd2f1e67f34cf92e43c3e8888eb5646016 (patch)
tree46094f8cb775a57fb0bbd1b10e1b8af67fccbf42 /src/gsm/lapd_core.c
parentb64b2b031344b354b7a59f1eb4c1f97d457613f3 (diff)
parentb36ad2debed2906674b0dc92062437d38994901e (diff)
Merge branch 'zecke/jolly-lapdm-fixes'
* Squashed fix and testcase into one.
Diffstat (limited to 'src/gsm/lapd_core.c')
-rw-r--r--src/gsm/lapd_core.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/gsm/lapd_core.c b/src/gsm/lapd_core.c
index b33cf6eb..f351308d 100644
--- a/src/gsm/lapd_core.c
+++ b/src/gsm/lapd_core.c
@@ -820,7 +820,12 @@ static int lapd_rx_u(struct msgb *msg, struct lapd_msg_ctx *lctx)
"frame established state\n");
/* If link is lost on the remote side, we start over
* and send DL-ESTABLISH indication again. */
- if (dl->v_send != dl->v_recv) {
+ /* Additionally, continue in case of content resoltion
+ * (GSM network). This happens, if the mobile has not
+ * yet received UA or another mobile (collision) tries
+ * to establish connection. The mobile must receive
+ * UA again. */
+ if (!dl->cont_res && dl->v_send != dl->v_recv) {
LOGP(DLLAPD, LOGL_INFO, "Remote reestablish\n");
mdl_error(MDL_CAUSE_SABM_MF, lctx);
break;
@@ -831,7 +836,8 @@ static int lapd_rx_u(struct msgb *msg, struct lapd_msg_ctx *lctx)
#ifdef TEST_CONTENT_RESOLUTION_NETWORK
dl->cont_res->data[0] ^= 0x01;
#endif
- if (memcmp(dl->cont_res, msg->data, length)) {
+ if (memcmp(dl->cont_res->data, msg->data,
+ length)) {
LOGP(DLLAPD, LOGL_INFO, "Another SABM "
"with diffrent content - "
"ignoring!\n");