Skip to content
Snippets Groups Projects
Commit 2a03d873 authored by winckel's avatar winckel
Browse files

Fixed PDN address lenght issue by replacing MME supported PDN type by requested PDN type.

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4972 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent 45c254d5
No related branches found
No related tags found
No related merge requests found
...@@ -82,13 +82,7 @@ static const UInt8_t _mme_api_xres[AUTH_XRES_SIZE] = { ...@@ -82,13 +82,7 @@ static const UInt8_t _mme_api_xres[AUTH_XRES_SIZE] = {
0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00
}; };
/* Network IP version capability */ static mme_api_ip_version_t _mme_api_ip_capability = MME_API_IPV4V6_ADDR;
enum {
MME_API_IPV4_ADDR,
MME_API_IPV6_ADDR,
MME_API_IPV4V6_ADDR,
MME_API_ADDR_MAX
} _mme_api_ip_capability = MME_API_IPV4V6_ADDR;
/* Pool of IPv4 addresses */ /* Pool of IPv4 addresses */
static uint8_t _mme_api_ipv4_addr[MME_API_PDN_MAX][4] = { static uint8_t _mme_api_ipv4_addr[MME_API_PDN_MAX][4] = {
...@@ -439,7 +433,7 @@ int mme_api_new_guti(const imsi_t *imsi, GUTI_t *guti, tac_t *tac, int *n_tacs) ...@@ -439,7 +433,7 @@ int mme_api_new_guti(const imsi_t *imsi, GUTI_t *guti, tac_t *tac, int *n_tacs)
** Others: None ** ** Others: None **
** ** ** **
***************************************************************************/ ***************************************************************************/
int mme_api_subscribe(OctetString *apn, OctetString *pdn_addr, int mme_api_subscribe(OctetString *apn, mme_api_ip_version_t mme_pdn_index, OctetString *pdn_addr,
int is_emergency, mme_api_qos_t *qos) int is_emergency, mme_api_qos_t *qos)
{ {
int rc = RETURNok; int rc = RETURNok;
...@@ -460,9 +454,9 @@ int mme_api_subscribe(OctetString *apn, OctetString *pdn_addr, ...@@ -460,9 +454,9 @@ int mme_api_subscribe(OctetString *apn, OctetString *pdn_addr,
/* Assign PDN address */ /* Assign PDN address */
if ( pdn_addr && (_mme_api_pdn_id < MME_API_PDN_MAX) ) { if ( pdn_addr && (_mme_api_pdn_id < MME_API_PDN_MAX) ) {
pdn_addr->length = pdn_addr->length =
_mme_api_pdn_addr[_mme_api_ip_capability][_mme_api_pdn_id].length; _mme_api_pdn_addr[mme_pdn_index][_mme_api_pdn_id].length;
pdn_addr->value = pdn_addr->value =
_mme_api_pdn_addr[_mme_api_ip_capability][_mme_api_pdn_id].value; _mme_api_pdn_addr[mme_pdn_index][_mme_api_pdn_id].value;
/* Increment the total number of PDN connections */ /* Increment the total number of PDN connections */
_mme_api_pdn_id += 1; _mme_api_pdn_id += 1;
} else { } else {
......
...@@ -49,6 +49,14 @@ typedef enum mme_api_feature_s { ...@@ -49,6 +49,14 @@ typedef enum mme_api_feature_s {
MME_API_SINGLE_ADDR_BEARERS = (1<<4), MME_API_SINGLE_ADDR_BEARERS = (1<<4),
} mme_api_feature_t; } mme_api_feature_t;
/* Network IP version capability */
typedef enum mme_api_ip_version_e {
MME_API_IPV4_ADDR,
MME_API_IPV6_ADDR,
MME_API_IPV4V6_ADDR,
MME_API_ADDR_MAX
} mme_api_ip_version_t;
/* /*
* EPS Mobility Management configuration data * EPS Mobility Management configuration data
* ------------------------------------------ * ------------------------------------------
...@@ -105,7 +113,7 @@ int mme_api_identify_imsi(const imsi_t *imsi, auth_vector_t *vector); ...@@ -105,7 +113,7 @@ int mme_api_identify_imsi(const imsi_t *imsi, auth_vector_t *vector);
int mme_api_identify_imei(const imei_t *imei, auth_vector_t *vector); int mme_api_identify_imei(const imei_t *imei, auth_vector_t *vector);
int mme_api_new_guti(const imsi_t *imsi, GUTI_t *guti, tac_t *tac, int *n_tacs); int mme_api_new_guti(const imsi_t *imsi, GUTI_t *guti, tac_t *tac, int *n_tacs);
int mme_api_subscribe(OctetString *apn, OctetString *pdn_addr, int mme_api_subscribe(OctetString *apn, mme_api_ip_version_t mme_pdn_index, OctetString *pdn_addr,
int is_emergency, mme_api_qos_t *qos); int is_emergency, mme_api_qos_t *qos);
int mme_api_unsubscribe(OctetString *apn); int mme_api_unsubscribe(OctetString *apn);
......
...@@ -663,11 +663,28 @@ int esm_proc_pdn_connectivity_request(emm_data_context_t *ctx, int pti, ...@@ -663,11 +663,28 @@ int esm_proc_pdn_connectivity_request(emm_data_context_t *ctx, int pti,
} }
if (rc != RETURNerror) { if (rc != RETURNerror) {
mme_api_ip_version_t mme_pdn_index;
int is_emergency = (request_type == ESM_PDN_REQUEST_EMERGENCY); int is_emergency = (request_type == ESM_PDN_REQUEST_EMERGENCY);
mme_api_qos_t qos; mme_api_qos_t qos;
switch (pdn_type)
{
case ESM_PDN_TYPE_IPV4:
mme_pdn_index = MME_API_IPV4_ADDR;
break;
case ESM_PDN_TYPE_IPV6:
mme_pdn_index = MME_API_IPV6_ADDR;
break;
case ESM_PDN_TYPE_IPV4V6:
default:
mme_pdn_index = MME_API_IPV4V6_ADDR;
break;
}
/* Check if connectivity with the requested PDN can be established */ /* Check if connectivity with the requested PDN can be established */
rc = mme_api_subscribe(apn, pdn_addr, is_emergency, &qos); rc = mme_api_subscribe(apn, mme_pdn_index, pdn_addr, is_emergency, &qos);
if (rc != RETURNok) { if (rc != RETURNok) {
LOG_TRACE(WARNING, "ESM-PROC - Connectivity to the requested PDN " LOG_TRACE(WARNING, "ESM-PROC - Connectivity to the requested PDN "
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment