diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2016-05-30 15:05:43 +0200 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2016-09-29 13:20:45 +0200 |
commit | 568798ae3765bb0d50cd6cb73e75abdf97b2676d (patch) | |
tree | 0e7f6d5fe73d15d08266ddda0503c7180e9f3114 /openbsc/src | |
parent | d12e3d70948118856db52ffdece26ec02b9d58fd (diff) |
gsm_04_08, gsm_subscriber: decouple lac from bts
The idea is to not have a direct pointer to a bts struct (into BSC land), but a
LAC to resolve the BSC or RNC depending on the appropriate A or IuCS interface.
subscr_update(): remove bts arg, add lac arg.
Pass conn->lac to gsm48_generate_lai() instead of bts->location_area_code.
Change-Id: I9f2b298a785bf4b2a1b3fcdd91b8256106b2d9de
Diffstat (limited to 'openbsc/src')
-rw-r--r-- | openbsc/src/libmsc/gsm_04_08.c | 10 | ||||
-rw-r--r-- | openbsc/src/libmsc/gsm_subscriber.c | 9 |
2 files changed, 9 insertions, 10 deletions
diff --git a/openbsc/src/libmsc/gsm_04_08.c b/openbsc/src/libmsc/gsm_04_08.c index 4a1437291..2ae91a8b6 100644 --- a/openbsc/src/libmsc/gsm_04_08.c +++ b/openbsc/src/libmsc/gsm_04_08.c @@ -326,8 +326,7 @@ static int finish_lu(struct gsm_subscriber_connection *conn) /* call subscr_update after putting the loc_upd_acc * in the transmit queue, since S_SUBSCR_ATTACHED might * trigger further action like SMS delivery */ - subscr_update(conn->subscr, conn->bts, - GSM_SUBSCRIBER_UPDATE_ATTACHED); + subscr_update(conn->subscr, conn->lac, GSM_SUBSCRIBER_UPDATE_ATTACHED); /* * The gsm0408_loc_upd_acc sends a MI with the TMSI. The @@ -473,7 +472,7 @@ static int gsm0408_loc_upd_acc(struct gsm_subscriber_connection *conn) lai = (struct gsm48_loc_area_id *) msgb_put(msg, sizeof(*lai)); gsm48_generate_lai(lai, conn->network->country_code, conn->network->network_code, - conn->bts->location_area_code); + conn->lac); if (conn->subscr->tmsi == GSM_RESERVED_TMSI) { uint8_t mi[10]; @@ -890,8 +889,7 @@ static void implit_attach(struct gsm_subscriber_connection *conn) if (conn->subscr->lac != GSM_LAC_RESERVED_DETACHED) return; - subscr_update(conn->subscr, conn->bts, - GSM_SUBSCRIBER_UPDATE_ATTACHED); + subscr_update(conn->subscr, conn->lac, GSM_SUBSCRIBER_UPDATE_ATTACHED); } @@ -1060,7 +1058,7 @@ static int gsm48_rx_mm_imsi_detach_ind(struct gsm_subscriber_connection *conn, s } if (subscr) { - subscr_update(subscr, conn->bts, + subscr_update(subscr, conn->lac, GSM_SUBSCRIBER_UPDATE_DETACHED); DEBUGP(DMM, "Subscriber: %s\n", subscr_name(subscr)); diff --git a/openbsc/src/libmsc/gsm_subscriber.c b/openbsc/src/libmsc/gsm_subscriber.c index 87c91d322..8163f4b70 100644 --- a/openbsc/src/libmsc/gsm_subscriber.c +++ b/openbsc/src/libmsc/gsm_subscriber.c @@ -294,16 +294,17 @@ int subscr_update_expire_lu(struct gsm_subscriber *s) return rc; } -int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts, int reason) +int subscr_update(struct gsm_subscriber *s, uint16_t lac, int reason) { int rc; + struct gsm_network *network = s->group->net; /* FIXME: Migrate pending requests from one BSC to another */ switch (reason) { case GSM_SUBSCRIBER_UPDATE_ATTACHED: - s->group = bts->network->subscr_group; + s->group = network->subscr_group; /* Indicate "attached to LAC" */ - s->lac = bts->location_area_code; + s->lac = lac; LOGP(DMM, LOGL_INFO, "Subscriber %s ATTACHED LAC=%u\n", subscr_name(s), s->lac); @@ -317,7 +318,7 @@ int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts, int reason) break; case GSM_SUBSCRIBER_UPDATE_DETACHED: /* Only detach if we are currently in this area */ - if (bts->location_area_code == s->lac) + if (lac == s->lac) s->lac = GSM_LAC_RESERVED_DETACHED; LOGP(DMM, LOGL_INFO, "Subscriber %s DETACHED\n", subscr_name(s)); rc = db_sync_subscriber(s); |