Merged with trunk

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6501 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
Lionel Gauthier
2015-02-10 11:22:57 +00:00
parent 57d7c10fdc
commit 5f3e26524b
9 changed files with 713 additions and 607 deletions
+1 -1
View File
@@ -37,7 +37,7 @@ export PROJDIR = $(CURDIR)
all: all:
ifeq ($(PROCESS), UE) ifeq ($(PROCESS), UE)
@$(CD) $(SECUDIR) && $(MAKE) @$(CD) $(SECUDIR) && $(MAKE) -f Makefile.NAS
endif endif
@$(CD) $(UTILDIR) && $(MAKE) @$(CD) $(UTILDIR) && $(MAKE)
@$(CD) $(APIDIR) && $(MAKE) @$(CD) $(APIDIR) && $(MAKE)
+9 -4
View File
@@ -34,13 +34,14 @@ endif
include $(PROJDIR)/Makerules include $(PROJDIR)/Makerules
include $(PROJDIR)/Makefile.inc include $(PROJDIR)/Makefile.inc
include $(PROJDIR)/../Makefile.tools
export LD_RUN_PATH = $(LIBDIR):$(LIBPROCESS) export LD_RUN_PATH = $(LIBDIR):$(LIBPROCESS)
LIBS = -lapi -lutil -lEMMmsg -lESMmsg -lies -lrt LIBS = -luenas.a -lrt
INCLUDES = -I. -I$(INCDIR) -I$(UTILDIR) -I$(USIMAPIDIR) -I$(EMMDIR) -I$(ESMDIR) -I$(IESDIR) INCLUDES = -I. -I$(INCDIR) -I$(UTILDIR) -I$(USIMAPIDIR) -I$(EMMDIR) -I$(ESMDIR) -I$(IESDIR)
LIBSUTIL = $(LIBDIR)/$(LIBUTIL).a $(LIBDIR)/$(LIBUTIL).so #LIBSUTIL = $(LIBDIR)/$(LIBUTIL).a $(LIBDIR)/$(LIBUTIL).so
USIM_OBJ = usim_data.o USIM_OBJ = usim_data.o
UE_OBJ = ue_data.o UE_OBJ = ue_data.o
@@ -57,13 +58,13 @@ all: $(TARGETS)
$(CC) $(CFLAGS) -c $< -o $@ $(CC) $(CFLAGS) -c $< -o $@
$(USIM_TARGET): $(USIM_OBJ) $(LIBSUTIL) $(USIM_TARGET): $(USIM_OBJ) $(LIBSUTIL)
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS) $(SECUDIR)/*.o -lnettle -lcrypto -lm $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) -lnettle -lcrypto -lm
@echo Replacing $@ to $(BINDIR) @echo Replacing $@ to $(BINDIR)
@$(RM) $(BINDIR)/$@ @$(RM) $(BINDIR)/$@
@$(CP) $@ $(BINDIR) @$(CP) $@ $(BINDIR)
$(UE_TARGET): $(UE_OBJ) $(LIBSUTIL) $(UE_TARGET): $(UE_OBJ) $(LIBSUTIL)
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS) $(SECUDIR)/*.o -lnettle -lcrypto -lm $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) -lnettle -lcrypto -lm
@echo Replacing $@ to $(BINDIR) @echo Replacing $@ to $(BINDIR)
@$(RM) $(BINDIR)/$@ @$(RM) $(BINDIR)/$@
@$(CP) $@ $(BINDIR) @$(CP) $@ $(BINDIR)
@@ -74,6 +75,10 @@ clean:
veryclean: clean veryclean: clean
$(RM) $(TARGETS) $(RM) $(TARGETS)
veryveryclean: veryclean
$(RM) -Rf *.o $(PROJDIR)
$(RM) -Rf *.a $(PROJDIR)
depend: depend:
makedepend -- ${CFLAGS} -- ${SRCS} makedepend -- ${CFLAGS} -- ${SRCS}
+2 -3
View File
@@ -53,8 +53,7 @@ Description Implements the utility used to generate data stored in the
#include <stdlib.h> // exit, free #include <stdlib.h> // exit, free
#include <string.h> // memset, strncpy #include <string.h> // memset, strncpy
//#define SELECTED_PLMN SFR1 #define SELECTED_PLMN SFR1
#define SELECTED_PLMN FCT1
/****************************************************************************/ /****************************************************************************/
/**************** E X T E R N A L D E F I N I T I O N S ****************/ /**************** E X T E R N A L D E F I N I T I O N S ****************/
@@ -290,7 +289,7 @@ static void _gen_user_data(user_nvdata_t* data)
static void _gen_emm_data(emm_nvdata_t* data) static void _gen_emm_data(emm_nvdata_t* data)
{ {
//#if (SELECTED_PLMN == FCT1) //#if (SELECTED_PLMN == FCT1)
#if 1 #if 0
/* /*
* International Mobile Subscriber Identity * International Mobile Subscriber Identity
* IMSI = MCC + MNC + MSIN = 310 (USA) + 028 (UNKNOWN) + 90832150 * IMSI = MCC + MNC + MSIN = 310 (USA) + 028 (UNKNOWN) + 90832150
+82 -77
View File
@@ -53,8 +53,7 @@ Description Implements the utility used to generate data stored in the
#include <stdlib.h> // exit #include <stdlib.h> // exit
#include <string.h> // memset, memcpy, strncpy #include <string.h> // memset, memcpy, strncpy
//#define SELECTED_PLMN SFR1 #define SELECTED_PLMN SFR1
#define SELECTED_PLMN FCT1
/****************************************************************************/ /****************************************************************************/
/**************** E X T E R N A L D E F I N I T I O N S ****************/ /**************** E X T E R N A L D E F I N I T I O N S ****************/
@@ -105,6 +104,7 @@ int main (int argc, const char* argv[])
{ {
int rc; int rc;
usim_data_t usim_data; usim_data_t usim_data;
int i;
unsigned char gen_data; unsigned char gen_data;
@@ -115,32 +115,28 @@ int main (int argc, const char* argv[])
fprintf(stderr, "Invalid parameter\n"); fprintf(stderr, "Invalid parameter\n");
_display_usage(argv[0]); _display_usage(argv[0]);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} } else if ((strcmp(argv[1], "--gen") == 0)
else if ( (strcmp(argv[1], "--gen") == 0) || || (strcmp(argv[1], "-g") == 0)) {
(strcmp(argv[1], "-g") == 0) ) {
/* Generate USIM data files */ /* Generate USIM data files */
gen_data = TRUE; gen_data = TRUE;
} } else if ((strcmp(argv[1], "--print") == 0)
else if ( (strcmp(argv[1], "--print") == 0) || || (strcmp(argv[1], "-p") == 0)) {
(strcmp(argv[1], "-p") == 0) ) {
/* Display content of USIM data files */ /* Display content of USIM data files */
gen_data = FALSE; gen_data = FALSE;
} } else {
else {
/* Display usage */ /* Display usage */
_display_usage(argv[0]); _display_usage(argv[0]);
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
} }
if (gen_data) if (gen_data) {
{
/* /*
* Initialize USIM data * Initialize USIM data
*/ */
memset(&usim_data, 0, sizeof(usim_data_t)); memset(&usim_data, 0, sizeof(usim_data_t));
//#if (SELECTED_PLMN == FCT1) //#if (SELECTED_PLMN == FCT1)
#if 1 #if 0
/* /*
* International Mobile Subscriber Identity * International Mobile Subscriber Identity
* IMSI = MCC + MNC + MSIN = 310 (USA) + 028 (UNKNOWN) + 90832150 * IMSI = MCC + MNC + MSIN = 310 (USA) + 028 (UNKNOWN) + 90832150
@@ -218,7 +214,7 @@ int main (int argc, const char* argv[])
/* /*
* List of Forbidden PLMNs * List of Forbidden PLMNs
*/ */
for (int i = 0; i < USIM_FPLMN_MAX; i++) { for (i = 0; i < USIM_FPLMN_MAX; i++) {
memset(&usim_data.fplmn[i], 0xff, sizeof(plmn_t)); memset(&usim_data.fplmn[i], 0xff, sizeof(plmn_t));
} }
/* /*
@@ -299,7 +295,7 @@ int main (int argc, const char* argv[])
/* /*
* PLMN Network Name and Operator PLMN List * PLMN Network Name and Operator PLMN List
*/ */
for (int i = SFR1; i < VDF2; i++) { for (i = SFR1; i < VDF2; i++) {
network_record_t record = network_records[i]; network_record_t record = network_records[i];
usim_data.pnn[i].fullname.type = USIM_PNN_FULLNAME_TAG; usim_data.pnn[i].fullname.type = USIM_PNN_FULLNAME_TAG;
usim_data.pnn[i].fullname.length = strlen(record.fullname); usim_data.pnn[i].fullname.length = strlen(record.fullname);
@@ -314,7 +310,7 @@ int main (int argc, const char* argv[])
usim_data.opl[i].end = record.tac_end; usim_data.opl[i].end = record.tac_end;
usim_data.opl[i].record_id = i; usim_data.opl[i].record_id = i;
} }
for (int i = VDF2; i < USIM_OPL_MAX; i++) { for (i = VDF2; i < USIM_OPL_MAX; i++) {
memset(&usim_data.opl[i].plmn, 0xff, sizeof(plmn_t)); memset(&usim_data.opl[i].plmn, 0xff, sizeof(plmn_t));
} }
@@ -331,29 +327,35 @@ int main (int argc, const char* argv[])
/* /*
* List of user controlled PLMN selector with Access Technology * List of user controlled PLMN selector with Access Technology
*/ */
for (int i = 0; i < USIM_PLMN_MAX; i++) { for (i = 0; i < USIM_PLMN_MAX; i++) {
memset(&usim_data.plmn[i], 0xff, sizeof(plmn_t)); memset(&usim_data.plmn[i], 0xff, sizeof(plmn_t));
} }
/* /*
* List of operator controlled PLMN selector with Access Technology * List of operator controlled PLMN selector with Access Technology
*/ */
usim_data.oplmn[0].plmn = network_records[VDF1].plmn; usim_data.oplmn[0].plmn = network_records[VDF1].plmn;
usim_data.oplmn[0].AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN | USIM_ACT_EUTRAN); usim_data.oplmn[0].AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN
| USIM_ACT_EUTRAN);
usim_data.oplmn[1].plmn = network_records[VDF2].plmn; usim_data.oplmn[1].plmn = network_records[VDF2].plmn;
usim_data.oplmn[1].AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN | USIM_ACT_EUTRAN); usim_data.oplmn[1].AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN
| USIM_ACT_EUTRAN);
usim_data.oplmn[2].plmn = network_records[VDF3].plmn; usim_data.oplmn[2].plmn = network_records[VDF3].plmn;
usim_data.oplmn[2].AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN | USIM_ACT_EUTRAN); usim_data.oplmn[2].AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN
| USIM_ACT_EUTRAN);
usim_data.oplmn[3].plmn = network_records[VDF4].plmn; usim_data.oplmn[3].plmn = network_records[VDF4].plmn;
usim_data.oplmn[3].AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN | USIM_ACT_EUTRAN); usim_data.oplmn[3].AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN
| USIM_ACT_EUTRAN);
usim_data.oplmn[4].plmn = network_records[VDF5].plmn; usim_data.oplmn[4].plmn = network_records[VDF5].plmn;
usim_data.oplmn[4].AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN | USIM_ACT_EUTRAN); usim_data.oplmn[4].AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN
for (int i = 5; i < USIM_OPLMN_MAX; i++) { | USIM_ACT_EUTRAN);
for (i = 5; i < USIM_OPLMN_MAX; i++) {
memset(&usim_data.oplmn[i], 0xff, sizeof(plmn_t)); memset(&usim_data.oplmn[i], 0xff, sizeof(plmn_t));
} }
/* /*
* EPS Location Information * EPS Location Information
*/ */
usim_data.epsloci.guti.gummei.plmn = network_records[SELECTED_PLMN].plmn; usim_data.epsloci.guti.gummei.plmn =
network_records[SELECTED_PLMN].plmn;
usim_data.epsloci.guti.gummei.MMEgid = DEFAULT_MME_ID; usim_data.epsloci.guti.gummei.MMEgid = DEFAULT_MME_ID;
usim_data.epsloci.guti.gummei.MMEcode = DEFAULT_MME_CODE; usim_data.epsloci.guti.gummei.MMEcode = DEFAULT_MME_CODE;
usim_data.epsloci.guti.m_tmsi = DEFAULT_M_TMSI; usim_data.epsloci.guti.m_tmsi = DEFAULT_M_TMSI;
@@ -363,7 +365,8 @@ int main (int argc, const char* argv[])
/* /*
* Non-Access Stratum configuration * Non-Access Stratum configuration
*/ */
usim_data.nasconfig.NAS_SignallingPriority.type = USIM_NAS_SIGNALLING_PRIORITY_TAG; usim_data.nasconfig.NAS_SignallingPriority.type =
USIM_NAS_SIGNALLING_PRIORITY_TAG;
usim_data.nasconfig.NAS_SignallingPriority.length = 1; usim_data.nasconfig.NAS_SignallingPriority.length = 1;
usim_data.nasconfig.NAS_SignallingPriority.value[0] = 0x00; usim_data.nasconfig.NAS_SignallingPriority.value[0] = 0x00;
usim_data.nasconfig.NMO_I_Behaviour.type = USIM_NMO_I_BEHAVIOUR_TAG; usim_data.nasconfig.NMO_I_Behaviour.type = USIM_NMO_I_BEHAVIOUR_TAG;
@@ -376,13 +379,16 @@ int main (int argc, const char* argv[])
#else #else
usim_data.nasconfig.AttachWithImsi.value[0] = 0x01; usim_data.nasconfig.AttachWithImsi.value[0] = 0x01;
#endif #endif
usim_data.nasconfig.MinimumPeriodicSearchTimer.type = USIM_MINIMUM_PERIODIC_SEARCH_TIMER_TAG; usim_data.nasconfig.MinimumPeriodicSearchTimer.type =
USIM_MINIMUM_PERIODIC_SEARCH_TIMER_TAG;
usim_data.nasconfig.MinimumPeriodicSearchTimer.length = 1; usim_data.nasconfig.MinimumPeriodicSearchTimer.length = 1;
usim_data.nasconfig.MinimumPeriodicSearchTimer.value[0] = 0x00; usim_data.nasconfig.MinimumPeriodicSearchTimer.value[0] = 0x00;
usim_data.nasconfig.ExtendedAccessBarring.type = USIM_EXTENDED_ACCESS_BARRING_TAG; usim_data.nasconfig.ExtendedAccessBarring.type =
USIM_EXTENDED_ACCESS_BARRING_TAG;
usim_data.nasconfig.ExtendedAccessBarring.length = 1; usim_data.nasconfig.ExtendedAccessBarring.length = 1;
usim_data.nasconfig.ExtendedAccessBarring.value[0] = 0x00; usim_data.nasconfig.ExtendedAccessBarring.value[0] = 0x00;
usim_data.nasconfig.Timer_T3245_Behaviour.type = USIM_TIMER_T3245_BEHAVIOUR_TAG; usim_data.nasconfig.Timer_T3245_Behaviour.type =
USIM_TIMER_T3245_BEHAVIOUR_TAG;
usim_data.nasconfig.Timer_T3245_Behaviour.length = 1; usim_data.nasconfig.Timer_T3245_Behaviour.length = 1;
usim_data.nasconfig.Timer_T3245_Behaviour.value[0] = 0x00; usim_data.nasconfig.Timer_T3245_Behaviour.value[0] = 0x00;
@@ -429,17 +435,16 @@ int main (int argc, const char* argv[])
/* /*
* Displays command line usage * Displays command line usage
*/ */
static void _display_usage(const char* command) static void _display_usage(const char* command) {
{
fprintf(stderr, "usage: %s [OPTION]\n", command); fprintf(stderr, "usage: %s [OPTION]\n", command);
fprintf(stderr, "\t[--gen|-g]\tGenerate the USIM data file\n"); fprintf(stderr, "\t[--gen|-g]\tGenerate the USIM data file\n");
fprintf(stderr, "\t[--print|-p]\tDisplay the content of the USIM data file\n"); fprintf(stderr,
"\t[--print|-p]\tDisplay the content of the USIM data file\n");
fprintf(stderr, "\t[--help|-h]\tDisplay this usage\n"); fprintf(stderr, "\t[--help|-h]\tDisplay this usage\n");
const char* path = getenv("USIM_DIR"); const char* path = getenv("USIM_DIR");
if (path != NULL) { if (path != NULL) {
fprintf(stderr, "USIM_DIR = %s\n", path); fprintf(stderr, "USIM_DIR = %s\n", path);
} } else {
else {
fprintf(stderr, "USIM_DIR environment variable is not defined\n"); fprintf(stderr, "USIM_DIR environment variable is not defined\n");
} }
} }
@@ -447,9 +452,9 @@ static void _display_usage(const char* command)
/* /*
* Displays USIM application data * Displays USIM application data
*/ */
static void _display_usim_data(const usim_data_t* data) static void _display_usim_data(const usim_data_t* data) {
{
int digits; int digits;
int i;
printf("Administrative Data:\n"); printf("Administrative Data:\n");
printf("\tUE_Operation_Mode\t= 0x%.2x\n", data->ad.UE_Operation_Mode); printf("\tUE_Operation_Mode\t= 0x%.2x\n", data->ad.UE_Operation_Mode);
@@ -458,8 +463,10 @@ static void _display_usim_data(const usim_data_t* data)
printf("IMSI:\n"); printf("IMSI:\n");
printf("\tlength\t= %d\n", data->imsi.length); printf("\tlength\t= %d\n", data->imsi.length);
printf("\tparity\t= %s\n", data->imsi.u.num.parity == EVEN_PARITY ? "Even" : "Odd"); printf("\tparity\t= %s\n",
digits = (data->imsi.length * 2) - 1 - (data->imsi.u.num.parity == EVEN_PARITY ? 1 : 0); data->imsi.u.num.parity == EVEN_PARITY ? "Even" : "Odd");
digits = (data->imsi.length * 2) - 1
- (data->imsi.u.num.parity == EVEN_PARITY ? 1 : 0);
printf("\tdigits\t= %d\n", digits); printf("\tdigits\t= %d\n", digits);
printf("\tdigits\t= %u%u%u%u%u%x%u%u%u%u", printf("\tdigits\t= %u%u%u%u%u%x%u%u%u%u",
data->imsi.u.num.digit1, // MCC digit 1 data->imsi.u.num.digit1, // MCC digit 1
@@ -468,10 +475,8 @@ static void _display_usim_data(const usim_data_t* data)
data->imsi.u.num.digit4, // MNC digit 1 data->imsi.u.num.digit4, // MNC digit 1
data->imsi.u.num.digit5, // MNC digit 2 data->imsi.u.num.digit5, // MNC digit 2
data->imsi.u.num.digit6, // MNC digit 3 data->imsi.u.num.digit6, // MNC digit 3
data->imsi.u.num.digit7, data->imsi.u.num.digit7, data->imsi.u.num.digit8,
data->imsi.u.num.digit8, data->imsi.u.num.digit9, data->imsi.u.num.digit10);
data->imsi.u.num.digit9,
data->imsi.u.num.digit10);
if (digits >= 11) if (digits >= 11)
printf("%x", data->imsi.u.num.digit11); printf("%x", data->imsi.u.num.digit11);
if (digits >= 12) if (digits >= 12)
@@ -507,55 +512,56 @@ static void _display_usim_data(const usim_data_t* data)
data->securityctx.algorithmID.value[0]); data->securityctx.algorithmID.value[0]);
printf("MSISDN\t= %u%u%u %u%u%u%u %u%u%u%u\n\n", printf("MSISDN\t= %u%u%u %u%u%u%u %u%u%u%u\n\n",
data->msisdn.number.digit[0].msb, data->msisdn.number.digit[0].msb, data->msisdn.number.digit[0].lsb,
data->msisdn.number.digit[0].lsb, data->msisdn.number.digit[1].msb, data->msisdn.number.digit[1].lsb,
data->msisdn.number.digit[1].msb, data->msisdn.number.digit[2].msb, data->msisdn.number.digit[2].lsb,
data->msisdn.number.digit[1].lsb, data->msisdn.number.digit[3].msb, data->msisdn.number.digit[3].lsb,
data->msisdn.number.digit[2].msb, data->msisdn.number.digit[4].msb, data->msisdn.number.digit[4].lsb,
data->msisdn.number.digit[2].lsb,
data->msisdn.number.digit[3].msb,
data->msisdn.number.digit[3].lsb,
data->msisdn.number.digit[4].msb,
data->msisdn.number.digit[4].lsb,
data->msisdn.number.digit[5].msb); data->msisdn.number.digit[5].msb);
for (int i = 0; i < USIM_PNN_MAX; i++) { for (i = 0; i < USIM_PNN_MAX; i++) {
printf("PNN[%d]\t= {%s, %s}\n", i, printf("PNN[%d]\t= {%s, %s}\n", i, data->pnn[i].fullname.value,
data->pnn[i].fullname.value, data->pnn[i].shortname.value); data->pnn[i].shortname.value);
} }
printf("\n"); printf("\n");
for (int i = 0; i < USIM_OPL_MAX; i++) { for (i = 0; i < USIM_OPL_MAX; i++) {
printf("OPL[%d]\t= ", i); PRINT_PLMN(data->opl[i].plmn); printf("OPL[%d]\t= ", i);
printf(", TAC = [%.4x - %.4x], record_id = %d\n", PRINT_PLMN(data->opl[i].plmn);
data->opl[i].start, data->opl[i].end, data->opl[i].record_id); printf(", TAC = [%.4x - %.4x], record_id = %d\n", data->opl[i].start,
data->opl[i].end, data->opl[i].record_id);
} }
printf("\n"); printf("\n");
printf("HPLMN\t\t= "); PRINT_PLMN(data->hplmn.plmn); printf("HPLMN\t\t= ");
PRINT_PLMN(data->hplmn.plmn);
printf(", AcT = 0x%x\n\n", data->hplmn.AcT); printf(", AcT = 0x%x\n\n", data->hplmn.AcT);
for (int i = 0; i < USIM_FPLMN_MAX; i++) { for (i = 0; i < USIM_FPLMN_MAX; i++) {
printf("FPLMN[%d]\t= ", i); PRINT_PLMN(data->fplmn[i]); printf("FPLMN[%d]\t= ", i);
PRINT_PLMN(data->fplmn[i]);
printf("\n"); printf("\n");
} }
printf("\n"); printf("\n");
for (int i = 0; i < USIM_EHPLMN_MAX; i++) { for (i = 0; i < USIM_EHPLMN_MAX; i++) {
printf("EHPLMN[%d]\t= ", i); PRINT_PLMN(data->ehplmn[i]); printf("EHPLMN[%d]\t= ", i);
PRINT_PLMN(data->ehplmn[i]);
printf("\n"); printf("\n");
} }
printf("\n"); printf("\n");
for (int i = 0; i < USIM_PLMN_MAX; i++) { for (i = 0; i < USIM_PLMN_MAX; i++) {
printf("PLMN[%d]\t\t= ", i); PRINT_PLMN(data->plmn[i].plmn); printf("PLMN[%d]\t\t= ", i);
PRINT_PLMN(data->plmn[i].plmn);
printf(", AcTPLMN = 0x%x", data->plmn[i].AcT); printf(", AcTPLMN = 0x%x", data->plmn[i].AcT);
printf("\n"); printf("\n");
} }
printf("\n"); printf("\n");
for (int i = 0; i < USIM_OPLMN_MAX; i++) { for (i = 0; i < USIM_OPLMN_MAX; i++) {
printf("OPLMN[%d]\t= ", i); PRINT_PLMN(data->oplmn[i].plmn); printf("OPLMN[%d]\t= ", i);
PRINT_PLMN(data->oplmn[i].plmn);
printf(", AcTPLMN = 0x%x", data->oplmn[i].AcT); printf(", AcTPLMN = 0x%x", data->oplmn[i].AcT);
printf("\n"); printf("\n");
} }
@@ -565,19 +571,19 @@ static void _display_usim_data(const usim_data_t* data)
printf("LOCI:\n"); printf("LOCI:\n");
printf("\tTMSI = 0x%.4x\n", data->loci.tmsi); printf("\tTMSI = 0x%.4x\n", data->loci.tmsi);
printf("\tLAI\t: PLMN = "); PRINT_PLMN(data->loci.lai.plmn); printf("\tLAI\t: PLMN = ");
PRINT_PLMN(data->loci.lai.plmn);
printf(", LAC = 0x%.2x\n", data->loci.lai.lac); printf(", LAC = 0x%.2x\n", data->loci.lai.lac);
printf("\tstatus\t= %d\n\n", data->loci.status); printf("\tstatus\t= %d\n\n", data->loci.status);
printf("PSLOCI:\n"); printf("PSLOCI:\n");
printf("\tP-TMSI = 0x%.4x\n", data->psloci.p_tmsi); printf("\tP-TMSI = 0x%.4x\n", data->psloci.p_tmsi);
printf("\tsignature = 0x%x 0x%x 0x%x\n", printf("\tsignature = 0x%x 0x%x 0x%x\n", data->psloci.signature[0],
data->psloci.signature[0], data->psloci.signature[1], data->psloci.signature[2]);
data->psloci.signature[1], printf("\tRAI\t: PLMN = ");
data->psloci.signature[2]); PRINT_PLMN(data->psloci.rai.plmn);
printf("\tRAI\t: PLMN = "); PRINT_PLMN(data->psloci.rai.plmn); printf(", LAC = 0x%.2x, RAC = 0x%.1x\n", data->psloci.rai.lac,
printf(", LAC = 0x%.2x, RAC = 0x%.1x\n", data->psloci.rai.rac);
data->psloci.rai.lac, data->psloci.rai.rac);
printf("\tstatus\t= %d\n\n", data->psloci.status); printf("\tstatus\t= %d\n\n", data->psloci.status);
printf("EPSLOCI:\n"); printf("EPSLOCI:\n");
@@ -589,8 +595,7 @@ static void _display_usim_data(const usim_data_t* data)
printf(", M-TMSI = 0x%.4x\n", data->epsloci.guti.m_tmsi); printf(", M-TMSI = 0x%.4x\n", data->epsloci.guti.m_tmsi);
printf("\tTAI\t: PLMN = "); printf("\tTAI\t: PLMN = ");
PRINT_PLMN(data->epsloci.tai.plmn); PRINT_PLMN(data->epsloci.tai.plmn);
printf(", TAC = 0x%.2x\n", printf(", TAC = 0x%.2x\n", data->epsloci.tai.tac);
data->epsloci.tai.tac);
printf("\tstatus\t= %d\n\n", data->epsloci.status); printf("\tstatus\t= %d\n\n", data->epsloci.status);
printf("NASCONFIG:\n"); printf("NASCONFIG:\n");
+1
View File
@@ -28,6 +28,7 @@
*******************************************************************************/ *******************************************************************************/
#include <stdint.h> #include <stdint.h>
#include <stdio.h> #include <stdio.h>
#include <unistd.h>
#include <gmp.h> #include <gmp.h>
#ifndef AUC_H_ #ifndef AUC_H_
+10
View File
@@ -70,11 +70,21 @@
#define MAX_NUM_CHANNEL_BITS (14*1200*6) // 14 symbols, 1200 REs, 12 bits/RE #define MAX_NUM_CHANNEL_BITS (14*1200*6) // 14 symbols, 1200 REs, 12 bits/RE
#define MAX_NUM_RE (14*1200) #define MAX_NUM_RE (14*1200)
#if !defined(SI_RNTI)
#define SI_RNTI (rnti_t)0xffff #define SI_RNTI (rnti_t)0xffff
#endif
#if !defined(M_RNTI)
#define M_RNTI (rnti_t)0xfffd #define M_RNTI (rnti_t)0xfffd
#endif
#if !defined(P_RNTI)
#define P_RNTI (rnti_t)0xfffe #define P_RNTI (rnti_t)0xfffe
#endif
#if !defined(CBA_RNTI)
#define CBA_RNTI (rnti_t)0xfff4 #define CBA_RNTI (rnti_t)0xfff4
#endif
#if !defined(C_RNTI)
#define C_RNTI (rnti_t)0x1234 #define C_RNTI (rnti_t)0x1234
#endif
#define PMI_2A_11 0 #define PMI_2A_11 0
#define PMI_2A_1m1 1 #define PMI_2A_1m1 1
+4 -10
View File
@@ -159,7 +159,6 @@ int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg,
int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_cfg, openair0_rf_map rf_map[MAX_NUM_CCs]); int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_cfg, openair0_rf_map rf_map[MAX_NUM_CCs]);
void fill_ue_band_info(void); void fill_ue_band_info(void);
#ifdef XFORMS #ifdef XFORMS
// current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0) // current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0)
// at eNB 0, an UL scope for every UE // at eNB 0, an UL scope for every UE
@@ -250,6 +249,7 @@ static uint32_t downlink_frequency[MAX_NUM_CCs][4];/* = {{19
{1907600000,1907600000,1907600000,1907600000}};*/ {1907600000,1907600000,1907600000,1907600000}};*/
static int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; /*= {{0,0,0,0},{0,0,0,0}}; static int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; /*= {{0,0,0,0},{0,0,0,0}};
*/ */
openair0_rf_map rf_map[MAX_NUM_CCs]; openair0_rf_map rf_map[MAX_NUM_CCs];
static char *conf_config_file_name = NULL; static char *conf_config_file_name = NULL;
@@ -464,7 +464,6 @@ static const eutra_band_t eutra_bands[] =
{43, 3600 * MHz, 3800 * MHz, 3600 * MHz, 3800 * MHz, TDD}, {43, 3600 * MHz, 3800 * MHz, 3600 * MHz, 3800 * MHz, TDD},
{44, 703 * MHz, 803 * MHz, 703 * MHz, 803 * MHz, TDD}, {44, 703 * MHz, 803 * MHz, 703 * MHz, 803 * MHz, TDD},
}; };
unsigned int build_rflocal(int txi, int txq, int rxi, int rxq) unsigned int build_rflocal(int txi, int txq, int rxi, int rxq)
{ {
return (txi + (txq<<6) + (rxi<<12) + (rxq<<18)); return (txi + (txq<<6) + (rxi<<12) + (rxq<<18));
@@ -1476,6 +1475,7 @@ static void *eNB_thread(void *arg)
attr.sched_deadline = 0.5 * 1000000; attr.sched_deadline = 0.5 * 1000000;
attr.sched_period = 1.0 * 1000000; attr.sched_period = 1.0 * 1000000;
/* pin the eNB main thread to CPU0*/ /* pin the eNB main thread to CPU0*/
/* if (pthread_setaffinity_np(pthread_self(), sizeof(mask),&mask) <0) { /* if (pthread_setaffinity_np(pthread_self(), sizeof(mask),&mask) <0) {
perror("[MAIN_ENB_THREAD] pthread_setaffinity_np failed\n"); perror("[MAIN_ENB_THREAD] pthread_setaffinity_np failed\n");
@@ -1875,7 +1875,6 @@ static void *UE_thread_synch(void *arg) {
LOG_D(PHY,"[SCHED][UE] Check absolute frequency %u\n",downlink_frequency[0][0]); LOG_D(PHY,"[SCHED][UE] Check absolute frequency %u\n",downlink_frequency[0][0]);
sync_mode=pbch; sync_mode=pbch;
} }
while (!oai_exit) { while (!oai_exit) {
if (pthread_mutex_lock(&UE->mutex_synch) != 0) { if (pthread_mutex_lock(&UE->mutex_synch) != 0) {
@@ -1892,7 +1891,6 @@ static void *UE_thread_synch(void *arg) {
} }
} // mutex_lock } // mutex_lock
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SYNCH,1); vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SYNCH,1);
switch (sync_mode) { switch (sync_mode) {
@@ -1995,6 +1993,7 @@ static void *UE_thread_synch(void *arg) {
// rt_sleep_ns(FRAME_PERIOD); // rt_sleep_ns(FRAME_PERIOD);
} // freq_offset } // freq_offset
} // initial_sync=0 } // initial_sync=0
break; break;
case si: case si:
default: default:
@@ -2012,6 +2011,7 @@ static void *UE_thread_synch(void *arg) {
printf("[openair][SCHED][eNB] error unlocking mutex for UE synch\n"); printf("[openair][SCHED][eNB] error unlocking mutex for UE synch\n");
} }
} }
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SYNCH,0); vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SYNCH,0);
} // while !oai_exit } // while !oai_exit
return(0); return(0);
@@ -2497,7 +2497,6 @@ static void *UE_thread(void *arg) {
//LOG_D(PHY,"HW RESYNC: hw_frame %d: Resynchronizing sample stream\n"); //LOG_D(PHY,"HW RESYNC: hw_frame %d: Resynchronizing sample stream\n");
frame=0; frame=0;
// dump ahead in time to start of frame // dump ahead in time to start of frame
#ifndef USRP_DEBUG #ifndef USRP_DEBUG
rxs = openair0.trx_read_func(&openair0, rxs = openair0.trx_read_func(&openair0,
&timestamp, &timestamp,
@@ -2941,7 +2940,6 @@ void init_UE_threads(void) {
} }
void fill_ue_band_info() { void fill_ue_band_info() {
UE_EUTRA_Capability_t *UE_EUTRA_Capability = UE_rrc_inst[0].UECap->UE_EUTRA_Capability; UE_EUTRA_Capability_t *UE_EUTRA_Capability = UE_rrc_inst[0].UECap->UE_EUTRA_Capability;
@@ -2969,7 +2967,6 @@ void fill_ue_band_info() {
} }
} }
} }
static void get_options (int argc, char **argv) { static void get_options (int argc, char **argv) {
int c; int c;
// char line[1000]; // char line[1000];
@@ -2988,7 +2985,6 @@ static void get_options (int argc, char **argv) {
const Enb_properties_array_t *enb_properties; const Enb_properties_array_t *enb_properties;
enum long_option_e { enum long_option_e {
@@ -3334,7 +3330,6 @@ int main(int argc, char **argv) {
memset(&openair0_cfg[0],0,sizeof(openair0_config_t)*MAX_CARDS); memset(&openair0_cfg[0],0,sizeof(openair0_config_t)*MAX_CARDS);
memset(tx_max_power,0,sizeof(int)*MAX_NUM_CCs); memset(tx_max_power,0,sizeof(int)*MAX_NUM_CCs);
set_latency_target(); set_latency_target();
mode = normal_txrx; mode = normal_txrx;
@@ -3799,7 +3794,6 @@ int main(int argc, char **argv) {
} }
printf("ITTI tasks created\n"); printf("ITTI tasks created\n");
#endif #endif
printf("Filling UE band info\n"); printf("Filling UE band info\n");
if (UE_flag==1) if (UE_flag==1)
fill_ue_band_info(); fill_ue_band_info();
+53
View File
@@ -846,6 +846,29 @@ compile_unisim() {
return 1 return 1
fi fi
} }
compile_nas_tools() {
export NVRAM_DIR=$OPENAIR_TARGETS/bin
cd $NVRAM_DIR
if [ ! -f /tmp/nas_cleaned ]; then
echo_success "make --directory=$OPENAIRCN_DIR/NAS/EURECOM-NAS/tools veryveryclean"
make --directory=$OPENAIRCN_DIR/NAS/EURECOM-NAS/tools veryveryclean
fi
echo_success "make --directory=$OPENAIRCN_DIR/NAS/EURECOM-NAS/tools all"
make --directory=$OPENAIRCN_DIR/NAS/EURECOM-NAS/tools all
rm .ue.nvram
rm .usim.nvram
touch /tmp/nas_cleaned
}
compile_ue_ip_nw_driver() {
cd $OPENAIR2_DIR && make ue_ip.ko
}
################################################ ################################################
# 1. check if the executable functions exist # 1. check if the executable functions exist
############################################### ###############################################
@@ -935,10 +958,20 @@ check_for_mbmssim_executable() {
fi fi
} }
check_for_nas_ue_executable() {
if [ ! -f $OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/UserProcess ]; then
echo_error "Cannot find UserProcess executable object in directory $OPENAIRCN_DIR/NAS/EURECOM-NAS/bin"
echo_fatal "Check the compilation logs in bin/install_log.txt"
fi
}
################################################ ################################################
# 1. check if the executable functions exist # 1. check if the executable functions exist
############################################### ###############################################
# arg1 is RT
# arg2 is HW
# arg3 is ENB_S1
install_ltesoftmodem() { install_ltesoftmodem() {
# RT # RT
if [ $1 = "RTAI" ]; then if [ $1 = "RTAI" ]; then
@@ -986,14 +1019,34 @@ install_ltesoftmodem() {
} }
# arg1 is ENB_S1 'boolean'
install_oaisim() { install_oaisim() {
if [ $1 = 0 ]; then if [ $1 = 0 ]; then
cd $OPENAIR2_DIR && make clean && make nasmesh_netlink.ko #|| exit 1 cd $OPENAIR2_DIR && make clean && make nasmesh_netlink.ko #|| exit 1
cd $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL && make clean && make # || exit 1 cd $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL && make clean && make # || exit 1
else
compile_ue_ip_nw_driver
install_nas_tools
fi fi
} }
install_nas_tools() {
cd $OPENAIR_TARGETS/bin
if [ ! -f .ue.nvram ]; then
echo_success "generate .ue_emm.nvram .ue.nvram"
$OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/ue_data --gen
fi
if [ ! -f .usim.nvram ]; then
echo_success "generate .usim.nvram"
$OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/usim_data --gen
fi
$OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/ue_data --print
$OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/usim_data --print
}
################################## ##################################
# create HSS DB # create HSS DB
################################ ################################
+39
View File
@@ -473,6 +473,12 @@ build_enb(){
check_for_oaisim_executable check_for_oaisim_executable
echo_info "7.2 finished oaisim target: check the installation log file bin/install_log.txt" echo_info "7.2 finished oaisim target: check the installation log file bin/install_log.txt"
if [ $ENB_S1 -eq 1 ]; then
compile_nas_tools 2>&1
nas_tools_compiled=$?
check_for_nas_tools_executable
echo_info "7.2.1 finished nas ue target: check the installation log file bin/install_log.txt"
fi
fi fi
if [ $TARGET = "UNISIM" ]; then if [ $TARGET = "UNISIM" ]; then
echo "################## compile_unisim ##################" >> bin/install_log.txt echo "################## compile_unisim ##################" >> bin/install_log.txt
@@ -800,6 +806,39 @@ if [ $RUN -ne 0 ]; then
$SUDO echo "run" >> ~/.gdb_lte_softmodem $SUDO echo "run" >> ~/.gdb_lte_softmodem
$SUDO gdb -nh -x ~/.gdb_lte_softmodem 2>&1 $SUDO gdb -nh -x ~/.gdb_lte_softmodem 2>&1
fi fi
elif [ $TARGET == "OAISIM" ]; then
if [ $ENB_S1 -eq 0 ]; then
echo_error "TODO: LOAD NASMESH IP DRIVER FOR UE AND eNB"
else
# prepare NAS for UE
if [ ! -f .ue.nvram ]; then
echo_success "generate .ue_emm.nvram .ue.nvram"
$OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/ue_data --gen
fi
if [ ! -f .usim.nvram ]; then
echo_success "generate .usim.nvram"
$OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/usim_data --gen
fi
$OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/ue_data --print
$OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/usim_data --print
insmod $OPENAIR2_DIR/NETWORK_DRIVER/UE_IP/ue_ip.ko
fi
if [ $RUN_GDB -eq 0 ]; then
$SUDO exec $OPENAIR_TARGETS/bin/oaisim `echo $EXE_ARGUMENTS`
else
$SUDO setenv MALLOC_CHECK_ 2
$SUDO touch ~/.gdb_oaisim
$SUDO echo "file $OPENAIR_TARGETS/bin/lte-oaisim" > ~/.gdb_oaisim
$SUDO echo "set args $EXE_ARGUMENTS" >> ~/.gdb_oaisim
$SUDO echo "run" >> ~/.gdb_oaisim
$SUDO gdb -nh -x ~/.gdb_oaisim 2>&1
fi
fi fi
;; ;;