diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/mme/mme_api.c b/openair-cn/NAS/EURECOM-NAS/src/api/mme/mme_api.c index d1b4966cef85eb942fd6e92a8272f06c6d66f6a1..5b970e8f683f6cb2adabf5728e7c532d765ed579 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/api/mme/mme_api.c +++ b/openair-cn/NAS/EURECOM-NAS/src/api/mme/mme_api.c @@ -82,13 +82,7 @@ static const UInt8_t _mme_api_xres[AUTH_XRES_SIZE] = { 0x00, 0x00, 0x00, 0x00 }; -/* Network IP version capability */ -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; +static mme_api_ip_version_t _mme_api_ip_capability = MME_API_IPV4V6_ADDR; /* Pool of IPv4 addresses */ 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) ** 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 rc = RETURNok; @@ -460,9 +454,9 @@ int mme_api_subscribe(OctetString *apn, OctetString *pdn_addr, /* Assign PDN address */ if ( pdn_addr && (_mme_api_pdn_id < MME_API_PDN_MAX) ) { 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 = - _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 */ _mme_api_pdn_id += 1; } else { diff --git a/openair-cn/NAS/EURECOM-NAS/src/api/mme/mme_api.h b/openair-cn/NAS/EURECOM-NAS/src/api/mme/mme_api.h index 644b4155f6cc6ec8fa8be2452632b1e069d3de42..30dc443063cfa3986e7e98ad50e94f0fb3154a50 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/api/mme/mme_api.h +++ b/openair-cn/NAS/EURECOM-NAS/src/api/mme/mme_api.h @@ -49,6 +49,14 @@ typedef enum mme_api_feature_s { MME_API_SINGLE_ADDR_BEARERS = (1<<4), } 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 * ------------------------------------------ @@ -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_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 mme_api_unsubscribe(OctetString *apn); diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/PdnConnectivity.c b/openair-cn/NAS/EURECOM-NAS/src/esm/PdnConnectivity.c index 98ad89dead7891cdb3f258bd5fae92cc70e569f7..6bddcc2b92329731ac55ca88ff1f4e324bfca555 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/PdnConnectivity.c +++ b/openair-cn/NAS/EURECOM-NAS/src/esm/PdnConnectivity.c @@ -663,11 +663,28 @@ int esm_proc_pdn_connectivity_request(emm_data_context_t *ctx, int pti, } if (rc != RETURNerror) { + mme_api_ip_version_t mme_pdn_index; int is_emergency = (request_type == ESM_PDN_REQUEST_EMERGENCY); 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 */ - 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) { LOG_TRACE(WARNING, "ESM-PROC - Connectivity to the requested PDN "