mirror of
https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw.git
synced 2025-11-03 13:33:29 +00:00
sgsn: Remove tlli_foreign2local
Currently foreign TLLI are sometimes mapped to local TLLI in the hope that they will match. This seems to sometimes introduce inconsisties, possibly leading to a failing assertion in _bssgp_tx_dl_ud. This mapping should probably reduce the allocation of additional LLME during routing area changes. This commit removes tlli_foreign2local. Sponsored-by: On-Waves ehf
This commit is contained in:
committed by
Holger Hans Peter Freyther
parent
2259c7528e
commit
3fbf0a3735
@@ -38,21 +38,6 @@
|
||||
|
||||
static struct gprs_llc_llme *llme_alloc(uint32_t tlli);
|
||||
|
||||
/* If the TLLI is foreign, return its local version */
|
||||
static inline uint32_t tlli_foreign2local(uint32_t tlli)
|
||||
{
|
||||
uint32_t new_tlli;
|
||||
|
||||
if (gprs_tlli_type(tlli) == TLLI_FOREIGN) {
|
||||
new_tlli = tlli | 0x40000000;
|
||||
LOGP(DLLC, LOGL_NOTICE, "TLLI 0x%08x is foreign, converting to "
|
||||
"local TLLI 0x%08x\n", tlli, new_tlli);
|
||||
} else
|
||||
new_tlli = tlli;
|
||||
|
||||
return new_tlli;
|
||||
}
|
||||
|
||||
/* Entry function from upper level (LLC), asking us to transmit a BSSGP PDU
|
||||
* to a remote MS (identified by TLLI) at a BTS identified by its BVCI and NSEI */
|
||||
static int _bssgp_tx_dl_ud(struct msgb *msg, struct sgsn_mm_ctx *mmctx)
|
||||
@@ -72,9 +57,7 @@ static int _bssgp_tx_dl_ud(struct msgb *msg, struct sgsn_mm_ctx *mmctx)
|
||||
|
||||
/* make sure we only send it to the right llme */
|
||||
OSMO_ASSERT(msgb_tlli(msg) == mmctx->llme->tlli
|
||||
|| msgb_tlli(msg) == mmctx->llme->old_tlli
|
||||
|| tlli_foreign2local(msgb_tlli(msg)) == mmctx->llme->tlli
|
||||
|| tlli_foreign2local(msgb_tlli(msg)) == mmctx->llme->old_tlli);
|
||||
|| msgb_tlli(msg) == mmctx->llme->old_tlli);
|
||||
}
|
||||
memcpy(&dup.qos_profile, qos_profile_default,
|
||||
sizeof(qos_profile_default));
|
||||
@@ -175,10 +158,6 @@ struct gprs_llc_lle *gprs_lle_get_or_create(const uint32_t tlli, uint8_t sapi)
|
||||
if (lle)
|
||||
return lle;
|
||||
|
||||
lle = lle_by_tlli_sapi(tlli_foreign2local(tlli), sapi);
|
||||
if (lle)
|
||||
return lle;
|
||||
|
||||
LOGP(DLLC, LOGL_NOTICE, "LLC: unknown TLLI 0x%08x, "
|
||||
"creating LLME on the fly\n", tlli);
|
||||
llme = llme_alloc(tlli);
|
||||
@@ -204,7 +183,7 @@ static struct gprs_llc_lle *lle_for_rx_by_tlli_sapi(const uint32_t tlli,
|
||||
|
||||
/* Maybe it is a routing area update but we already know this sapi? */
|
||||
if (gprs_tlli_type(tlli) == TLLI_FOREIGN) {
|
||||
lle = lle_by_tlli_sapi(tlli_foreign2local(tlli), sapi);
|
||||
lle = lle_by_tlli_sapi(tlli, sapi);
|
||||
if (lle) {
|
||||
LOGP(DLLC, LOGL_NOTICE,
|
||||
"LLC RX: Found a local entry for TLLI 0x%08x\n",
|
||||
|
||||
@@ -203,11 +203,9 @@ static void test_llme(void)
|
||||
{
|
||||
struct gprs_llc_lle *lle, *lle_copy;
|
||||
uint32_t local_tlli;
|
||||
uint32_t foreign_tlli;
|
||||
|
||||
printf("Testing LLME allocations\n");
|
||||
local_tlli = gprs_tmsi2tlli(0x234, TLLI_LOCAL);
|
||||
foreign_tlli = gprs_tmsi2tlli(0x234, TLLI_FOREIGN);
|
||||
|
||||
/* initial state */
|
||||
OSMO_ASSERT(count(gprs_llme_list()) == 0);
|
||||
@@ -221,9 +219,6 @@ static void test_llme(void)
|
||||
lle_copy = gprs_lle_get_or_create(local_tlli, 3);
|
||||
OSMO_ASSERT(lle == lle_copy);
|
||||
OSMO_ASSERT(count(gprs_llme_list()) == 1);
|
||||
lle_copy = gprs_lle_get_or_create(foreign_tlli, 3);
|
||||
OSMO_ASSERT(lle == lle_copy);
|
||||
OSMO_ASSERT(count(gprs_llme_list()) == 1);
|
||||
|
||||
/* unassign which should delete it*/
|
||||
gprs_llgmm_assign(lle->llme, lle->llme->tlli, 0xffffffff, GPRS_ALGO_GEA0, NULL);
|
||||
|
||||
Reference in New Issue
Block a user