aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/include
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <holger@moiji-mobile.com>2015-05-05 21:16:19 +0200
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2015-05-05 21:16:19 +0200
commit4c8e8f990a24fc5ecb24c5c21c944d8ab4dc7c1e (patch)
treeeca760e9ec46564f520252834170bedb74071eb5 /openbsc/include
parent337343d159888886eaa68476b70dbe19db93845b (diff)
parentd05e06989def81f886c673956da476e626a27af5 (diff)
Merge branch 'zecke/features/gprs-gsup-fixes'
When communicating with a GGSN that is not the OpenGGSN the PDP context activation does fail. This is because on the activation of the first PDP context we need to supply a MSISDN. Extend the protocol, parse the MSISDN and then send it to the GGSN. The second item is that we have only forwarded the requested QoS of the subscriber. In most cases this is 0x0, 0x0, ... which means one requests a rate 0 byte/sec which the GGSN will not allow. Make it possible to receive, store and use the subscribed QoS of the Subscriber.
Diffstat (limited to 'openbsc/include')
-rw-r--r--openbsc/include/openbsc/gprs_gsup_messages.h7
-rw-r--r--openbsc/include/openbsc/gprs_sgsn.h5
-rw-r--r--openbsc/include/openbsc/gsm_04_08_gprs.h1
3 files changed, 13 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/gprs_gsup_messages.h b/openbsc/include/openbsc/gprs_gsup_messages.h
index 9857b979d..123e1fc05 100644
--- a/openbsc/include/openbsc/gprs_gsup_messages.h
+++ b/openbsc/include/openbsc/gprs_gsup_messages.h
@@ -29,6 +29,7 @@
#define GPRS_GSUP_MAX_NUM_PDP_INFO 10 /* GSM 09.02 limits this to 50 */
#define GPRS_GSUP_MAX_NUM_AUTH_INFO 5
+#define GPRS_GSUP_MAX_MSISDN_LEN 9
#define GPRS_GSUP_PDP_TYPE_SIZE 2
@@ -40,9 +41,11 @@ enum gprs_gsup_iei {
GPRS_GSUP_PDP_INFO_IE = 0x05,
GPRS_GSUP_CANCEL_TYPE_IE = 0x06,
GPRS_GSUP_FREEZE_PTMSI_IE = 0x07,
+ GPRS_GSUP_MSISDN_IE = 0x08,
GPRS_GSUP_PDP_CONTEXT_ID_IE = 0x10,
GPRS_GSUP_PDP_TYPE_IE = 0x11,
GPRS_GSUP_ACCESS_POINT_NAME_IE = 0x12,
+ GPRS_GSUP_PDP_QOS_IE = 0x13,
GPRS_GSUP_RAND_IE = 0x20,
GPRS_GSUP_SRES_IE = 0x21,
GPRS_GSUP_KC_IE = 0x22
@@ -89,6 +92,8 @@ struct gprs_gsup_pdp_info {
uint16_t pdp_type;
const uint8_t *apn_enc;
size_t apn_enc_len;
+ const uint8_t *qos_enc;
+ size_t qos_enc_len;
};
struct gprs_gsup_message {
@@ -102,6 +107,8 @@ struct gprs_gsup_message {
size_t num_auth_tuples;
struct gprs_gsup_pdp_info pdp_infos[GPRS_GSUP_MAX_NUM_PDP_INFO];
size_t num_pdp_infos;
+ const uint8_t *msisdn_enc;
+ size_t msisdn_enc_len;
};
int gprs_gsup_decode(const uint8_t *data, size_t data_len,
diff --git a/openbsc/include/openbsc/gprs_sgsn.h b/openbsc/include/openbsc/gprs_sgsn.h
index 2572ead52..7a429cdab 100644
--- a/openbsc/include/openbsc/gprs_sgsn.h
+++ b/openbsc/include/openbsc/gprs_sgsn.h
@@ -294,6 +294,8 @@ struct sgsn_subscriber_pdp_data {
unsigned int context_id;
uint16_t pdp_type;
char apn_str[GSM_APN_LENGTH];
+ uint8_t qos_subscribed[20];
+ size_t qos_subscribed_len;
};
struct sgsn_subscriber_data {
@@ -302,6 +304,9 @@ struct sgsn_subscriber_data {
int auth_triplets_updated;
struct llist_head pdp_list;
int error_cause;
+
+ uint8_t msisdn[9];
+ size_t msisdn_len;
};
#define SGSN_ERROR_CAUSE_NONE (-1)
diff --git a/openbsc/include/openbsc/gsm_04_08_gprs.h b/openbsc/include/openbsc/gsm_04_08_gprs.h
index 3eec98365..f35d11b60 100644
--- a/openbsc/include/openbsc/gsm_04_08_gprs.h
+++ b/openbsc/include/openbsc/gsm_04_08_gprs.h
@@ -100,6 +100,7 @@ enum gsm48_gprs_ie_sm {
* but which we use to simplify internal APIs */
OSMO_IE_GSM_REQ_QOS = 0xfd,
OSMO_IE_GSM_REQ_PDP_ADDR = 0xfe,
+ OSMO_IE_GSM_SUB_QOS = 0xff,
};
/* Chapter 9.4.15 / Table 9.4.15 */