mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-13 04:30:28 +00:00
Read PDU session configuration and request
Use the new PDU session configuration functionality of the parent commit. It is now possible to request multiple PDU sessions, and to request specific PDU session types. While the new uicc0.pdu_sessions is preferred, it is still possible to use the "legacy" uicc0.dnn/nssai_sst/nssai_sd. The old parameters --default-pdu-id and --extra-pdu-id are not allowed anymore, as it is possible to manually define this in the UE configuration. Correspondingly, fix the use of those options, where applicable. Note: since the default_pdu_id is changed to -1, all interface names will have pX to interface names appended (oaitun_ue1pX). The next commit will correct this.
This commit is contained in:
@@ -82,7 +82,7 @@ static int config_check_dnn(configmodule_interface_t *cfg, paramdef_t *param)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int get_pdu_session_configs(int module_id, pdu_session_config_t *configs, int max_len)
|
||||
int get_pdu_session_configs(const char *uiccName, pdu_session_config_t *configs, int max_len)
|
||||
{
|
||||
paramdef_t pdu_sess_params[] = PDU_SESS_PARAMS_DESC;
|
||||
const int npsp = sizeofArray(pdu_sess_params);
|
||||
@@ -92,7 +92,7 @@ int get_pdu_session_configs(int module_id, pdu_session_config_t *configs, int ma
|
||||
"param_def_t array and corresponding checkedparam_t array should have the same size");
|
||||
for (int i = 0; i < sizeofArray(pdu_sess_params); ++i)
|
||||
pdu_sess_params[i].chkPptr = &pdu_sess_params_check[i];
|
||||
int ret = config_getlist(config_get_if(), &pdu_sess_list, pdu_sess_params, sizeofArray(pdu_sess_params), NULL);
|
||||
int ret = config_getlist(config_get_if(), &pdu_sess_list, pdu_sess_params, sizeofArray(pdu_sess_params), uiccName);
|
||||
if (ret < 0) {
|
||||
// couldn't load configuration from pdu_sessions, caller has to handle
|
||||
return -1;
|
||||
|
||||
@@ -31,6 +31,6 @@ typedef struct {
|
||||
char *dnn; // [103]?
|
||||
} pdu_session_config_t;
|
||||
|
||||
int get_pdu_session_configs(int module_id, pdu_session_config_t *configs, int max_len);
|
||||
int get_pdu_session_configs(const char *uiccName, pdu_session_config_t *configs, int max_len);
|
||||
|
||||
#endif /* PDU_SESSION_H_ */
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
*/
|
||||
#include <ctype.h>
|
||||
|
||||
#include "common/platform_constants.h"
|
||||
#include <openair3/UICC/usim_interface.h>
|
||||
#include <openair3/NAS/COMMON/milenage.h>
|
||||
extern uint16_t NB_UE_INST;
|
||||
@@ -76,10 +77,7 @@ uicc_t *init_uicc(char *sectionName) {
|
||||
// key, OPc, sqn, amf don't need to be read from the true USIM
|
||||
int ret = config_get(config_get_if(), uicc_params, sizeofArray(uicc_params), sectionName);
|
||||
AssertFatal(ret >= 0, "configuration couldn't be performed for uicc name: %s", sectionName);
|
||||
LOG_I(SIM,
|
||||
"UICC simulation: IMSI=%s, IMEISV=%s, Ki=%s, OPc=%s, DNN=%s, SST=0x%02x, SD=0x%06x\n",
|
||||
uicc->imsiStr, uicc->imeisvStr, uicc->keyStr, uicc->opcStr,
|
||||
uicc->dnnStr, uicc->nssai_sst, uicc->nssai_sd);
|
||||
LOG_I(SIM, "UICC simulation: IMSI=%s, IMEISV=%s, Ki=%s, OPc=%s\n", uicc->imsiStr, uicc->imeisvStr, uicc->keyStr, uicc->opcStr);
|
||||
to_hex(uicc->keyStr,uicc->key, sizeof(uicc->key) );
|
||||
to_hex(uicc->opcStr,uicc->opc, sizeof(uicc->opc) );
|
||||
to_hex(uicc->sqnStr,uicc->sqn, sizeof(uicc->sqn) );
|
||||
@@ -112,6 +110,36 @@ uicc_t * checkUicc(int Mod_id) {
|
||||
char uiccName[64];
|
||||
sprintf(uiccName,"uicc%d", Mod_id);
|
||||
uiccArray[Mod_id]=(void*)init_uicc(uiccName);
|
||||
uicc_t *uicc = uiccArray[Mod_id];
|
||||
uicc->n_pdu_sessions = get_pdu_session_configs(uiccName, uicc->pdu_sessions, sizeof(uicc->pdu_sessions));
|
||||
if (uicc->n_pdu_sessions > 0) {
|
||||
LOG_I(SIM, "overriding potential %s.dnn/nssai_sst/nssai_sd from %s.pdu_sessions\n", uiccName, uiccName);
|
||||
} else if (uicc->n_pdu_sessions < 0) {
|
||||
// we could not load from "new" pdu_sessions list, so read from "legacy"
|
||||
// config
|
||||
LOG_W(SIM,
|
||||
"loading PDU session parameters from legacy UICC configuration. Please update to use %s.pdu_sessions instead to make this warning disappear\n",
|
||||
uiccName);
|
||||
sleep(3);
|
||||
uicc->n_pdu_sessions = 1;
|
||||
pdu_session_config_t *pdu = &uicc->pdu_sessions[0];
|
||||
AssertFatal(uicc->dnnStr != NULL, "no default DNN, cannot create\n");
|
||||
pdu->id = DEFAULT_NOS1_PDU_ID; // any default would do
|
||||
pdu->dnn = strdup(uicc->dnnStr);
|
||||
pdu->nssai.sst = uicc->nssai_sst;
|
||||
pdu->nssai.sd = uicc->nssai_sd;
|
||||
pdu->type = 1; /* = PDU_SESSION_TYPE_IPV4 */
|
||||
} // else: uicc->n_pdu_sessions == 0 => don't request a PDU session
|
||||
for (int i = 0; i < uicc->n_pdu_sessions; ++i) {
|
||||
const pdu_session_config_t *pdu = &uicc->pdu_sessions[i];
|
||||
LOG_I(SIM,
|
||||
"will request PDU session ID %d, type %d, DNN %s, NSSAI %d.%6x\n",
|
||||
pdu->id,
|
||||
pdu->type,
|
||||
pdu->dnn,
|
||||
pdu->nssai.sst,
|
||||
pdu->nssai.sd);
|
||||
}
|
||||
}
|
||||
return (uicc_t*) uiccArray[Mod_id];
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#include <common/utils/load_module_shlib.h>
|
||||
#include <common/config/config_userapi.h>
|
||||
#include "common_lib.h"
|
||||
#include "pdu_session.h"
|
||||
|
||||
/* 3GPP glossary
|
||||
RES RESponse
|
||||
@@ -53,6 +54,8 @@ typedef struct {
|
||||
char *dnnStr;
|
||||
int nssai_sst;
|
||||
int nssai_sd;
|
||||
pdu_session_config_t pdu_sessions[256];
|
||||
int n_pdu_sessions;
|
||||
uint8_t key[16];
|
||||
uint8_t opc[16];
|
||||
uint8_t amf[2];
|
||||
|
||||
Reference in New Issue
Block a user