On 10/15/2011 12:46 AM, Holger Hans Peter Freyther wrote:
On 10/15/2011 12:26 AM, Holger Hans Peter Freyther
wrote:
Hi,
this is 'dangerous' but the below makes my E71 connect to the network. What
will happen now is that N(U) will count upwards and after some failures my
phone will do the GPRS ATTACH. Now this is dangerous as the TLLI we 'accept'
is not part of our network... so I think we should assign a new TLLI and use
the foreign one as old TLLI?
So how to move forward from here? when will we delete the TLLI? how to deal
with TLLIs that are not local (random, foreign, ...)? We should still create a
context but it should not clash with other parts? Shall we put RAC in this
context too? When will we purge old contexts?
before (note RX not knowing it, TX still not knowing it):
<0017> gprs_llc.c:700 LLC RX: unknown TLLI 0xb538c935, creating LLME on the fly
<0002> gprs_gmm.c:920 -> GMM RA UPDATE REQUEST type="RA updating"
REJECT
<0002> gprs_gmm.c:859 <- ROUTING AREA UPDATE REJECT
<0017> gprs_llc.c:118 TLLI 0xb538c935 is foreign, converting to local TLLI
0xf538c935
<0017> gprs_llc.c:343 LLC TX: unknown TLLI 0xb538c935, creating LLME on the fly
after:
<0017> gprs_llc.c:431 LLC SAPI=1 C FCS=0x184703CMD=UI DATA
<0017> gprs_llc.c:118 TLLI 0xb538c935 is foreign, converting to local TLLI
0xf538c935
<0017> gprs_llc.c:118 TLLI 0xb538c935 is foreign, converting to local TLLI
0xf538c935
<0017> gprs_llc.c:702 LLC RX: unknown TLLI 0xb538c935, creating LLME on the fly
<0002> gprs_gmm.c:920 -> GMM RA UPDATE REQUEST type="RA updating"
REJECT
<0002> gprs_gmm.c:859 <- ROUTING AREA UPDATE REJECT
<0017> gprs_llc.c:118 TLLI 0xb538c935 is foreign, converting to local TLLI
0xf538c935
diff:
diff --git a/openbsc/src/gprs/gprs_llc.c b/openbsc/src/gprs/gprs_llc.c
index 3d4e986..a9c88c2 100644
--- a/openbsc/src/gprs/gprs_llc.c
+++ b/openbsc/src/gprs/gprs_llc.c
@@ -157,8 +157,10 @@ static struct gprs_llc_llme *llme_alloc(uint32_t tlli)
if (!llme)
return NULL;
- llme->tlli = tlli;
- llme->old_tlli = 0xffffffff;
+ llme->tlli = tlli_foreign2local(tlli);
+ llme->old_tlli = tlli;
+ if (llme->old_tlli == llme->tlli)
+ llme->old_tlli = 0xffffffff;
llme->state = GPRS_LLMS_UNASSIGNED;
for (i = 0; i < ARRAY_SIZE(llme->lle); i++)