sgsn: Support subscriber based authentication
This commit mainly extends sgsn_auth.c to use and support the
auth_state SGSN_AUTH_AUTHENTICATE. It will be activated when IMSI and
IMEI are available, authentication is required
(subscr->sgsn_data->authenticate is set), but the MM context is not
marked as authenticated. If the state has been set to
SGSN_AUTH_AUTHENTICATE and sgsn_auth_update() is called, the GMM
layer will be informed by invoking gsm0408_gprs_authenticate().
Sponsored-by: On-Waves ehf
diff --git a/openbsc/src/gprs/sgsn_auth.c b/openbsc/src/gprs/sgsn_auth.c
index 1f11948..1219176 100644
--- a/openbsc/src/gprs/sgsn_auth.c
+++ b/openbsc/src/gprs/sgsn_auth.c
@@ -110,6 +110,10 @@
if (mmctx->subscr->flags & GPRS_SUBSCRIBER_UPDATE_PENDING)
return mmctx->auth_state;
+ if (mmctx->subscr->sgsn_data->authenticate &&
+ !mmctx->is_authenticated)
+ return SGSN_AUTH_AUTHENTICATE;
+
if (mmctx->subscr->authorized)
return SGSN_AUTH_ACCEPTED;
@@ -180,6 +184,9 @@
mmctx->auth_state = auth_state;
switch (auth_state) {
+ case SGSN_AUTH_AUTHENTICATE:
+ gsm0408_gprs_authenticate(mmctx);
+ break;
case SGSN_AUTH_ACCEPTED:
gsm0408_gprs_access_granted(mmctx);
break;