sgsn: Pass subscriber error causes to the GMM layer

This patch extends gsm0408_gprs_access_denied and
gsm0408_gprs_access_cancelled to accept GMM cause codes. These are
then passed to the MS, unless gsm0408_gprs_access_cancelled is called
with cause 0 (no error -> updateProcedure).

Since gsm0408_gprs_access_denied uses GMM_CAUSE_GPRS_NOTALLOWED if
the cause is not set, and the subscriber's error_cause is never set
(and thus always 0), the SGSN's behaviour does not change with this
patch.

Sponsored-by: On-Waves ehf

Conflicts:
	openbsc/include/openbsc/gprs_sgsn.h

[hfreyther: Conflict due the removal of the unused
authenticate flag]
diff --git a/openbsc/src/gprs/sgsn_auth.c b/openbsc/src/gprs/sgsn_auth.c
index 9cc67db..9f526dc 100644
--- a/openbsc/src/gprs/sgsn_auth.c
+++ b/openbsc/src/gprs/sgsn_auth.c
@@ -207,6 +207,7 @@
 	enum sgsn_auth_state auth_state;
 	struct gsm_subscriber *subscr = mmctx->subscr;
 	struct gsm_auth_tuple *at;
+	int gmm_cause;
 
 	auth_state = sgsn_auth_state(mmctx);
 
@@ -256,10 +257,12 @@
 		gsm0408_gprs_access_granted(mmctx);
 		break;
 	case SGSN_AUTH_REJECTED:
+		gmm_cause = subscr->sgsn_data->error_cause;
+
 		if (subscr && (subscr->flags & GPRS_SUBSCRIBER_CANCELLED) != 0)
-			gsm0408_gprs_access_cancelled(mmctx);
+			gsm0408_gprs_access_cancelled(mmctx, gmm_cause);
 		else
-			gsm0408_gprs_access_denied(mmctx);
+			gsm0408_gprs_access_denied(mmctx, gmm_cause);
 		break;
 	default:
 		break;