Send NAS NSSAI SD only if configured, show UICC DNN/SST/SD info
This commit is contained in:
@@ -733,16 +733,20 @@ static void generatePduSessionEstablishRequest(int Mod_id, uicc_t * uicc, as_nas
|
|||||||
mm_msg->uplink_nas_transport.pdusessionid = 10;
|
mm_msg->uplink_nas_transport.pdusessionid = 10;
|
||||||
mm_msg->uplink_nas_transport.requesttype = 1;
|
mm_msg->uplink_nas_transport.requesttype = 1;
|
||||||
size += 3;
|
size += 3;
|
||||||
mm_msg->uplink_nas_transport.snssai.length = 4;
|
const bool has_nssai_sd = uicc->nssai_sd != 0xffffff; // 0xffffff means "no SD", TS 23.003
|
||||||
|
const size_t nssai_len = has_nssai_sd ? 4 : 1;
|
||||||
|
mm_msg->uplink_nas_transport.snssai.length = nssai_len;
|
||||||
//Fixme: it seems there are a lot of memory errors in this: this value was on the stack,
|
//Fixme: it seems there are a lot of memory errors in this: this value was on the stack,
|
||||||
// but pushed in a itti message to another thread
|
// but pushed in a itti message to another thread
|
||||||
// this kind of error seems in many places in 5G NAS
|
// this kind of error seems in many places in 5G NAS
|
||||||
mm_msg->uplink_nas_transport.snssai.value=calloc(1,4);
|
mm_msg->uplink_nas_transport.snssai.value = calloc(1, nssai_len);
|
||||||
mm_msg->uplink_nas_transport.snssai.value[0] = uicc->nssai_sst;
|
mm_msg->uplink_nas_transport.snssai.value[0] = uicc->nssai_sst;
|
||||||
mm_msg->uplink_nas_transport.snssai.value[1] = (uicc->nssai_sd>>16)&0xFF;
|
if (has_nssai_sd) {
|
||||||
mm_msg->uplink_nas_transport.snssai.value[2] = (uicc->nssai_sd>>8)&0xFF;
|
mm_msg->uplink_nas_transport.snssai.value[1] = (uicc->nssai_sd >> 16) & 0xFF;
|
||||||
mm_msg->uplink_nas_transport.snssai.value[3] = (uicc->nssai_sd)&0xFF;
|
mm_msg->uplink_nas_transport.snssai.value[2] = (uicc->nssai_sd >> 8) & 0xFF;
|
||||||
size += (1+1+4);
|
mm_msg->uplink_nas_transport.snssai.value[3] = (uicc->nssai_sd) & 0xFF;
|
||||||
|
}
|
||||||
|
size += 1 + 1 + nssai_len;
|
||||||
int dnnSize=strlen(uicc->dnnStr);
|
int dnnSize=strlen(uicc->dnnStr);
|
||||||
mm_msg->uplink_nas_transport.dnn.value=calloc(1,dnnSize+1);
|
mm_msg->uplink_nas_transport.dnn.value=calloc(1,dnnSize+1);
|
||||||
mm_msg->uplink_nas_transport.dnn.length = dnnSize + 1;
|
mm_msg->uplink_nas_transport.dnn.length = dnnSize + 1;
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ extern uint16_t NB_UE_INST;
|
|||||||
{"sqn", "USIM sqn\n", 0, strptr:&uicc->sqnStr, defstrval:"000000", TYPE_STRING, 0 }, \
|
{"sqn", "USIM sqn\n", 0, strptr:&uicc->sqnStr, defstrval:"000000", TYPE_STRING, 0 }, \
|
||||||
{"dnn", "UE dnn (apn)\n", 0, strptr:&uicc->dnnStr, defstrval:"oai", TYPE_STRING, 0 }, \
|
{"dnn", "UE dnn (apn)\n", 0, strptr:&uicc->dnnStr, defstrval:"oai", TYPE_STRING, 0 }, \
|
||||||
{"nssai_sst", "UE nssai\n", 0, iptr:&uicc->nssai_sst, defintval:1, TYPE_INT, 0 }, \
|
{"nssai_sst", "UE nssai\n", 0, iptr:&uicc->nssai_sst, defintval:1, TYPE_INT, 0 }, \
|
||||||
{"nssai_sd", "UE nssai\n", 0, iptr:&uicc->nssai_sd, defintval:1, TYPE_INT, 0 }, \
|
{"nssai_sd", "UE nssai\n", 0, iptr:&uicc->nssai_sd, defintval:0xffffff, TYPE_INT, 0 }, \
|
||||||
};
|
};
|
||||||
|
|
||||||
static uicc_t** uiccArray=NULL;
|
static uicc_t** uiccArray=NULL;
|
||||||
@@ -73,7 +73,10 @@ uicc_t *init_uicc(char *sectionName) {
|
|||||||
// key, OPc, sqn, amf don't need to be read from the true USIM
|
// key, OPc, sqn, amf don't need to be read from the true USIM
|
||||||
int ret = config_get( uicc_params,sizeof(uicc_params)/sizeof(paramdef_t),sectionName);
|
int ret = config_get( uicc_params,sizeof(uicc_params)/sizeof(paramdef_t),sectionName);
|
||||||
AssertFatal(ret >= 0, "configuration couldn't be performed for uicc name: %s", sectionName);
|
AssertFatal(ret >= 0, "configuration couldn't be performed for uicc name: %s", sectionName);
|
||||||
LOG_I(SIM, "UICC simulation: IMSI=%s, Ki=%s, OPc=%s\n", uicc->imsiStr, uicc->keyStr, uicc->opcStr);
|
LOG_I(SIM,
|
||||||
|
"UICC simulation: IMSI=%s, Ki=%s, OPc=%s, DNN=%s, SST=0x%02x, SD=0x%06x\n",
|
||||||
|
uicc->imsiStr, uicc->keyStr, uicc->opcStr,
|
||||||
|
uicc->dnnStr, uicc->nssai_sst, uicc->nssai_sd);
|
||||||
to_hex(uicc->keyStr,uicc->key, sizeof(uicc->key) );
|
to_hex(uicc->keyStr,uicc->key, sizeof(uicc->key) );
|
||||||
to_hex(uicc->opcStr,uicc->opc, sizeof(uicc->opc) );
|
to_hex(uicc->opcStr,uicc->opc, sizeof(uicc->opc) );
|
||||||
to_hex(uicc->sqnStr,uicc->sqn, sizeof(uicc->sqn) );
|
to_hex(uicc->sqnStr,uicc->sqn, sizeof(uicc->sqn) );
|
||||||
|
|||||||
Reference in New Issue
Block a user