aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2015-02-03 19:45:46 +0100
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2015-02-06 13:22:24 +0100
commitca69b0f68d748e56eecd14d1c1a754971e9240ba (patch)
tree89a0b19720e68c8233faaa31f0c6ada6445ff102
parent277b71e0d8b7a8c53599546b0d06ae3810a290eb (diff)
Revert "gprs: Block other GSUP procedures during PURGE_MS"
This reverts commit f81cacc6814dde73f203d125b0065d1451a98317. Since the PURGE MS retry mechanism had been removed, this feature is not used anymore. It just makes the code more complex. Conflicts: openbsc/include/openbsc/gprs_sgsn.h openbsc/src/gprs/gprs_subscriber.c openbsc/tests/sgsn/sgsn_test.c
-rw-r--r--openbsc/include/openbsc/gprs_sgsn.h12
-rw-r--r--openbsc/src/gprs/gprs_subscriber.c51
-rw-r--r--openbsc/tests/sgsn/sgsn_test.c83
-rw-r--r--openbsc/tests/sgsn/sgsn_test.ok1
4 files changed, 1 insertions, 146 deletions
diff --git a/openbsc/include/openbsc/gprs_sgsn.h b/openbsc/include/openbsc/gprs_sgsn.h
index 20d535205..2572ead52 100644
--- a/openbsc/include/openbsc/gprs_sgsn.h
+++ b/openbsc/include/openbsc/gprs_sgsn.h
@@ -296,20 +296,12 @@ struct sgsn_subscriber_pdp_data {
char apn_str[GSM_APN_LENGTH];
};
-enum sgsn_subscriber_proc {
- SGSN_SUBSCR_PROC_NONE = 0,
- SGSN_SUBSCR_PROC_PURGE,
- SGSN_SUBSCR_PROC_UPD_LOC,
- SGSN_SUBSCR_PROC_UPD_AUTH,
-};
-
struct sgsn_subscriber_data {
struct sgsn_mm_ctx *mm;
struct gsm_auth_tuple auth_triplets[5];
int auth_triplets_updated;
struct llist_head pdp_list;
int error_cause;
- enum sgsn_subscriber_proc blocked_by;
};
#define SGSN_ERROR_CAUSE_NONE (-1)
@@ -359,10 +351,6 @@ void gprs_subscr_update(struct gsm_subscriber *subscr);
void gprs_subscr_update_auth_info(struct gsm_subscriber *subscr);
int gprs_subscr_rx_gsup_message(struct msgb *msg);
-int gprs_subscr_purge(struct gsm_subscriber *subscr);
-int gprs_subscr_query_auth_info(struct gsm_subscriber *subscr);
-int gprs_subscr_location_update(struct gsm_subscriber *subscr);
-
/* Called on subscriber data updates */
void sgsn_update_subscriber_data(struct sgsn_mm_ctx *mmctx);
diff --git a/openbsc/src/gprs/gprs_subscriber.c b/openbsc/src/gprs/gprs_subscriber.c
index 24603403d..848683439 100644
--- a/openbsc/src/gprs/gprs_subscriber.c
+++ b/openbsc/src/gprs/gprs_subscriber.c
@@ -82,22 +82,6 @@ static int gsup_read_cb(struct gprs_gsup_client *gsupc, struct msgb *msg)
return rc;
}
-static int check_blocking(
- struct gsm_subscriber *subscr,
- enum sgsn_subscriber_proc what)
-{
- if (subscr->sgsn_data->blocked_by == SGSN_SUBSCR_PROC_NONE ||
- subscr->sgsn_data->blocked_by == what)
- return 1;
-
- return 0;
-}
-
-static void abort_blocking_procedure(struct gsm_subscriber *subscr)
-{
- /* reset something */
-}
-
int gprs_subscr_purge(struct gsm_subscriber *subscr);
static struct sgsn_subscriber_data *sgsn_subscriber_data_alloc(void *ctx)
@@ -659,42 +643,17 @@ int gprs_subscr_rx_gsup_message(struct msgb *msg)
int gprs_subscr_purge(struct gsm_subscriber *subscr)
{
struct gprs_gsup_message gsup_msg = {0};
- int rc;
-
- if (!check_blocking(subscr, SGSN_SUBSCR_PROC_PURGE)) {
- LOGGSUBSCRP(
- LOGL_NOTICE, subscr,
- "Cannot purge MS subscriber, blocked\n");
- return -EAGAIN;
- }
-
- /* GSM 09.02, 19.4.1.4 requires other MAP requests to be blocked until
- * this procedure is completed
- */
- subscr->sgsn_data->blocked_by = SGSN_SUBSCR_PROC_PURGE;
LOGGSUBSCRP(LOGL_INFO, subscr, "purging MS subscriber\n");
gsup_msg.message_type = GPRS_GSUP_MSGT_PURGE_MS_REQUEST;
- rc = gprs_subscr_tx_gsup_message(subscr, &gsup_msg);
- if (rc < 0)
- subscr->sgsn_data->blocked_by = SGSN_SUBSCR_PROC_NONE;
-
- return rc;
+ return gprs_subscr_tx_gsup_message(subscr, &gsup_msg);
}
int gprs_subscr_query_auth_info(struct gsm_subscriber *subscr)
{
struct gprs_gsup_message gsup_msg = {0};
- if (!check_blocking(subscr, SGSN_SUBSCR_PROC_UPD_AUTH)) {
- LOGGSUBSCRP(
- LOGL_NOTICE, subscr,
- "Cannot start update auth info request procedure, blocked\n");
- abort_blocking_procedure(subscr);
- return -EAGAIN;
- }
-
LOGGSUBSCRP(LOGL_INFO, subscr,
"subscriber auth info is not available\n");
@@ -706,14 +665,6 @@ int gprs_subscr_location_update(struct gsm_subscriber *subscr)
{
struct gprs_gsup_message gsup_msg = {0};
- if (!check_blocking(subscr, SGSN_SUBSCR_PROC_UPD_LOC)) {
- LOGGSUBSCRP(
- LOGL_NOTICE, subscr,
- "Cannot start update location procedure, blocked\n");
- abort_blocking_procedure(subscr);
- return -EAGAIN;
- }
-
LOGGSUBSCRP(LOGL_INFO, subscr,
"subscriber data is not available\n");
diff --git a/openbsc/tests/sgsn/sgsn_test.c b/openbsc/tests/sgsn/sgsn_test.c
index d55a0fc6a..6fc4f9906 100644
--- a/openbsc/tests/sgsn/sgsn_test.c
+++ b/openbsc/tests/sgsn/sgsn_test.c
@@ -636,88 +636,6 @@ int my_gprs_gsup_client_send_dummy(struct gprs_gsup_client *gsupc, struct msgb *
return 0;
};
-
-static void test_subscriber_blocking(void)
-{
- struct gsm_subscriber *s1;
- const char *imsi1 = "1234567890";
- struct sgsn_mm_ctx *ctx;
- struct gprs_ra_id raid = { 0, };
- uint32_t local_tlli = 0xffeeddcc;
- int rc;
-
- printf("Testing subcriber procedure blocking\n");
-
- gprs_gsup_client_send_cb = my_gprs_gsup_client_send_dummy;
- sgsn->gsup_client = talloc_zero(tall_bsc_ctx, struct gprs_gsup_client);
-
- /* Check for emptiness */
- OSMO_ASSERT(gprs_subscr_get_by_imsi(imsi1) == NULL);
-
- /* Create a context */
- OSMO_ASSERT(count(gprs_llme_list()) == 0);
- ctx = alloc_mm_ctx(local_tlli, &raid);
- strncpy(ctx->imsi, imsi1, sizeof(ctx->imsi) - 1);
-
- /* Allocate and attach a subscriber */
- s1 = gprs_subscr_get_or_create_by_mmctx(ctx);
- assert_subscr(s1, imsi1);
-
- /* Start SendAuthInfoRequest procedure */
- rc = gprs_subscr_query_auth_info(s1);
- /* Not blocking */
- OSMO_ASSERT(rc == 0);
-
- /* Start UpdateLocation procedure */
- rc = gprs_subscr_location_update(s1);
- /* Blocking */
- OSMO_ASSERT(rc == 0);
-
- /* Start PurgeMS procedure */
- rc = gprs_subscr_purge(s1);
- /* Not blocking */
- OSMO_ASSERT(rc == 0);
- OSMO_ASSERT(s1->sgsn_data->blocked_by == SGSN_SUBSCR_PROC_PURGE);
-
- /* Start PurgeMS procedure (retry) */
- rc = gprs_subscr_purge(s1);
- /* Not blocking */
- OSMO_ASSERT(rc == 0);
-
- /* Start SendAuthInfoRequest procedure */
- rc = gprs_subscr_query_auth_info(s1);
- /* Blocking */
- OSMO_ASSERT(rc == -EAGAIN);
-
- /* Start UpdateLocation procedure */
- rc = gprs_subscr_location_update(s1);
- /* Blocking */
- OSMO_ASSERT(rc == -EAGAIN);
-
- /* Unblock manually (normally done by the caller of gprs_subscr_purge) */
- s1->sgsn_data->blocked_by = SGSN_SUBSCR_PROC_NONE;
-
- /* Start SendAuthInfoRequest procedure */
- rc = gprs_subscr_query_auth_info(s1);
- /* Not blocking */
- OSMO_ASSERT(rc == 0);
-
- /* Start UpdateLocation procedure */
- rc = gprs_subscr_location_update(s1);
- /* Blocking */
- OSMO_ASSERT(rc == 0);
-
- subscr_put(s1);
- sgsn_mm_ctx_cleanup_free(ctx);
-
- assert_no_subscrs();
-
- gprs_gsup_client_send_cb = __real_gprs_gsup_client_send;
- talloc_free(sgsn->gsup_client);
- sgsn->gsup_client = NULL;
-}
-
-
/*
* Test that a GMM Detach will remove the MMCTX and the
* associated LLME.
@@ -2081,7 +1999,6 @@ int main(int argc, char **argv)
test_subscriber();
test_auth_triplets();
test_subscriber_gsup();
- test_subscriber_blocking();
test_gmm_detach();
test_gmm_detach_power_off();
test_gmm_detach_no_mmctx();
diff --git a/openbsc/tests/sgsn/sgsn_test.ok b/openbsc/tests/sgsn/sgsn_test.ok
index bef8c9897..7913a3914 100644
--- a/openbsc/tests/sgsn/sgsn_test.ok
+++ b/openbsc/tests/sgsn/sgsn_test.ok
@@ -2,7 +2,6 @@ Testing LLME allocations
Testing core subscriber data API
Testing authentication triplet handling
Testing subcriber GSUP handling
-Testing subcriber procedure blocking
Testing GMM detach
Testing GMM detach (power off)
Testing GMM detach (no MMCTX)