UE/USIM/API: fix interface for storing usim_data
This commit is contained in:
@@ -100,6 +100,16 @@ int main (int argc, const char* argv[])
|
||||
|
||||
unsigned char gen_data;
|
||||
|
||||
/* Get USIM application pathname */
|
||||
char* path = memory_get_path(USIM_API_NVRAM_DIRNAME,
|
||||
USIM_API_NVRAM_FILENAME);
|
||||
|
||||
if (path == NULL) {
|
||||
fprintf(stderr, "USIM-API - Failed to get USIM pathname");
|
||||
free(path);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/*
|
||||
* Read command line parameters
|
||||
*/
|
||||
@@ -415,7 +425,7 @@ int main (int argc, const char* argv[])
|
||||
/*
|
||||
* Write USIM application data
|
||||
*/
|
||||
rc = usim_api_write(&usim_data);
|
||||
rc = usim_api_write(path, &usim_data);
|
||||
|
||||
if (rc != RETURNok) {
|
||||
perror("ERROR\t: usim_api_write() failed");
|
||||
@@ -427,7 +437,7 @@ int main (int argc, const char* argv[])
|
||||
* Read USIM application data
|
||||
*/
|
||||
memset(&usim_data, 0, sizeof(usim_data_t));
|
||||
rc = usim_api_read(&usim_data);
|
||||
rc = usim_api_read(path, &usim_data);
|
||||
|
||||
if (rc != RETURNok) {
|
||||
perror("ERROR\t: usim_api_read() failed");
|
||||
@@ -443,7 +453,6 @@ int main (int argc, const char* argv[])
|
||||
/*
|
||||
* Display USIM file location
|
||||
*/
|
||||
char* path = memory_get_path("USIM_DIR", ".usim.nvram");
|
||||
printf("\nUSIM data file: %s\n", path);
|
||||
free(path);
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@ Description Implements the API used by the NAS layer to read/write
|
||||
#include "aka_functions.h"
|
||||
#include <string.h> // memcpy, memset
|
||||
#include <stdlib.h> // malloc, free
|
||||
#include <stdio.h>
|
||||
|
||||
/****************************************************************************/
|
||||
/**************** E X T E R N A L D E F I N I T I O N S ****************/
|
||||
@@ -56,17 +57,6 @@ Description Implements the API used by the NAS layer to read/write
|
||||
/******************* L O C A L D E F I N I T I O N S *******************/
|
||||
/****************************************************************************/
|
||||
|
||||
/*
|
||||
* The name of the file where are stored data of the USIM application
|
||||
*/
|
||||
#define USIM_API_NVRAM_FILENAME ".usim.nvram"
|
||||
|
||||
/*
|
||||
* The name of the environment variable which defines the directory
|
||||
* where the USIM application file is located
|
||||
*/
|
||||
#define USIM_API_NVRAM_DIRNAME "USIM_DIR"
|
||||
|
||||
static int _usim_api_check_sqn(uint32_t seq, uint8_t ind);
|
||||
|
||||
/****************************************************************************/
|
||||
@@ -87,24 +77,14 @@ static int _usim_api_check_sqn(uint32_t seq, uint8_t ind);
|
||||
** Others: None **
|
||||
** **
|
||||
***************************************************************************/
|
||||
int usim_api_read(usim_data_t* data)
|
||||
int usim_api_read(const char *filename, usim_data_t* data)
|
||||
{
|
||||
LOG_FUNC_IN;
|
||||
|
||||
/* Get USIM application pathname */
|
||||
char* path = memory_get_path(USIM_API_NVRAM_DIRNAME,
|
||||
USIM_API_NVRAM_FILENAME);
|
||||
|
||||
if (path == NULL) {
|
||||
LOG_TRACE(ERROR, "USIM-API - Failed to get USIM pathname");
|
||||
LOG_FUNC_RETURN (RETURNerror);
|
||||
}
|
||||
|
||||
/* Read USIM application data */
|
||||
if (memory_read(path, data, sizeof(usim_data_t)) != RETURNok) {
|
||||
if (memory_read(filename, data, sizeof(usim_data_t)) != RETURNok) {
|
||||
LOG_TRACE(ERROR, "USIM-API - %s file is either not valid "
|
||||
"or not present", path);
|
||||
free(path);
|
||||
"or not present", filename);
|
||||
LOG_FUNC_RETURN (RETURNerror);
|
||||
}
|
||||
|
||||
@@ -123,7 +103,7 @@ int usim_api_read(usim_data_t* data)
|
||||
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11 };
|
||||
#endif
|
||||
memcpy(data->keys.op, _op, sizeof(_op));
|
||||
free(path);
|
||||
|
||||
LOG_FUNC_RETURN (RETURNok);
|
||||
}
|
||||
|
||||
@@ -141,28 +121,17 @@ int usim_api_read(usim_data_t* data)
|
||||
** Others: None **
|
||||
** **
|
||||
***************************************************************************/
|
||||
int usim_api_write(const usim_data_t* data)
|
||||
int usim_api_write(const char *filename, const usim_data_t* data)
|
||||
{
|
||||
LOG_FUNC_IN;
|
||||
|
||||
/* Get USIM application pathname */
|
||||
char* path = memory_get_path(USIM_API_NVRAM_DIRNAME,
|
||||
USIM_API_NVRAM_FILENAME);
|
||||
|
||||
if (path == NULL) {
|
||||
LOG_TRACE(ERROR, "USIM-API - Failed to get USIM pathname");
|
||||
LOG_FUNC_RETURN (RETURNerror);
|
||||
}
|
||||
|
||||
/* Write USIM application data */
|
||||
if (memory_write(path, data, sizeof(usim_data_t)) != RETURNok) {
|
||||
if (memory_write(filename, data, sizeof(usim_data_t)) != RETURNok) {
|
||||
|
||||
LOG_TRACE(ERROR, "USIM-API - Unable to write USIM file %s", path);
|
||||
free(path);
|
||||
LOG_TRACE(ERROR, "USIM-API - Unable to write USIM file %s", filename);
|
||||
LOG_FUNC_RETURN (RETURNerror);
|
||||
}
|
||||
|
||||
free(path);
|
||||
LOG_FUNC_RETURN (RETURNok);
|
||||
}
|
||||
|
||||
|
||||
@@ -54,6 +54,17 @@ Description Implements the API used by the NAS layer to read/write
|
||||
#define USIM_API_K_SIZE 16
|
||||
#define USIM_API_K_VALUE "fec86ba6eb707ed08905757b1bb44b8f"
|
||||
|
||||
/*
|
||||
* The name of the file where are stored data of the USIM application
|
||||
*/
|
||||
#define USIM_API_NVRAM_FILENAME ".usim.nvram"
|
||||
|
||||
/*
|
||||
* The name of the environment variable which defines the directory
|
||||
* where the USIM application file is located
|
||||
*/
|
||||
#define USIM_API_NVRAM_DIRNAME "USIM_DIR"
|
||||
|
||||
/****************************************************************************/
|
||||
/************************ G L O B A L T Y P E S ************************/
|
||||
/****************************************************************************/
|
||||
@@ -366,9 +377,9 @@ typedef struct {
|
||||
/****************** E X P O R T E D F U N C T I O N S ******************/
|
||||
/****************************************************************************/
|
||||
|
||||
int usim_api_read(usim_data_t* data);
|
||||
int usim_api_read(const char *filename, usim_data_t* data);
|
||||
|
||||
int usim_api_write(const usim_data_t* data);
|
||||
int usim_api_write(const char *filename, const usim_data_t* data);
|
||||
|
||||
int usim_api_authenticate(usim_data_t *usim_data, const OctetString* rand_pP, const OctetString* autn_pP,
|
||||
OctetString* auts, OctetString* res,
|
||||
|
||||
@@ -193,7 +193,7 @@ void emm_main_initialize(nas_user_t *user, emm_indication_callback_t cb, const c
|
||||
/*
|
||||
* Get USIM application data
|
||||
*/
|
||||
if ( usim_api_read(&user->usim_data) != RETURNok ) {
|
||||
if ( usim_api_read(user->usim_data_store, &user->usim_data) != RETURNok ) {
|
||||
/* The USIM application may not be present or not valid */
|
||||
LOG_TRACE(WARNING, "EMM-MAIN - Failed to read USIM application data");
|
||||
} else {
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
# include "nas_parser.h"
|
||||
# include "nas_proc.h"
|
||||
# include "msc.h"
|
||||
# include "memory.h"
|
||||
|
||||
#include "nas_user.h"
|
||||
|
||||
@@ -94,6 +95,13 @@ void *nas_ue_task(void *args_p)
|
||||
MSC_START_USE();
|
||||
/* Initialize UE NAS (EURECOM-NAS) */
|
||||
{
|
||||
/* Get USIM data application filename */
|
||||
user->usim_data_store = memory_get_path(USIM_API_NVRAM_DIRNAME, USIM_API_NVRAM_FILENAME);
|
||||
if ( user->usim_data_store == NULL ) {
|
||||
LOG_E(NAS, "[UE %d] - Failed to get USIM data application filename", user->ueid);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* Initialize user interface (to exchange AT commands with user process) */
|
||||
nas_user_api_id_initialize(user);
|
||||
user->user_at_commands = calloc_or_fail(sizeof(user_at_commands_t));
|
||||
|
||||
@@ -75,6 +75,7 @@ typedef struct {
|
||||
security_data_t *security_data; //Internal data used for security mode control procedure
|
||||
// Hardware persistent storage
|
||||
usim_data_t usim_data; // USIM application data
|
||||
const char *usim_data_store; // USIM application data filename
|
||||
user_nvdata_t *nas_user_nvdata; //UE parameters stored in the UE's non-volatile memory device
|
||||
//
|
||||
nas_user_context_t *nas_user_context;
|
||||
|
||||
Reference in New Issue
Block a user