On Fri, May 23, 2014 at 11:44:40AM +0200, Michal Grznár wrote:
Hi,
And the problem was as I said in Imsi attach procedure new TLLI == new allocated P-tmsi, and there was a problem that the function gprs_tmsi2tlli() function there was not called and so I had to mask the upper bits in function where the p-tmsi is allocated, there is also a pcap trace where you can see it.
Could you please elaborate of what/were (e.g. packet numbers) we can see "it" and what it should be instead? And please use "git diff" or preferable "git commit" and git format-patch. The "diff" you include is hand-written and sadly not usable because of this.
And as written by Harald before. The place you patch is not correct. The method you patch should generate a unique P-TMSI. It might should mask some of the higher bits. But you need to look at the callers of this function if the tlli is not updated.
e.g. in src/gprs/gprs_gmm.c you will see something like this:
ctx->p_tmsi = sgsn_alloc_ptmsi(); #endif
/* Even if there is no P-TMSI allocated, the MS will switch from * foreign TLLI to local TLLI */ ctx->tlli_new = gprs_tmsi2tlli(ctx->p_tmsi, TLLI_LOCAL);
/* Inform LLC layer about new TLLI but keep old active */ gprs_llgmm_assign(ctx->llme, ctx->tlli, ctx->tlli_new, GPRS_ALGO_GEA0, NULL);
So this call to gprs_tmsi2tlli will make sure that 0xc0000000 will be set. In fact I see two calls to sgsn_alloc_ptmsi and both of them do the above and assign the new tlli to the context. So please could you try to explain what you are trying to solve?
holger