diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index f2d22e523131533c8e39853cbf7c93a3be842e3e..3d8724fd4fd4e7db55532d74aa5c87aa7e3d916a 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -253,8 +253,8 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t */ // printf("rb_alloc[1]=%x,rb_alloc[0]=%x\n",rb_alloc2[1],rb_alloc2[0]); } else { - LOG_E(PHY,"resource type 1 not supported for N_RB_DL=100\n"); - mac_xface->macphy_exit("resource type 1 not supported for N_RB_DL=100\n"); + LOG_E(PHY,"resource type 1 not supported for N_RB_DL=50\n"); + // mac_xface->macphy_exit("resource type 1 not supported for N_RB_DL=100\n"); /* subset = rb_alloc&1; shift = (rb_alloc>>1)&1; @@ -284,7 +284,7 @@ void conv_rballoc(uint8_t ra_header,uint32_t rb_alloc,uint32_t N_RB_DL,uint32_t } } else { LOG_E(PHY,"resource type 1 not supported for N_RB_DL=100\n"); - mac_xface->macphy_exit("resource type 1 not supported for N_RB_DL=100\n"); + // mac_xface->macphy_exit("resource type 1 not supported for N_RB_DL=100\n"); /* subset = rb_alloc&1; shift = (rb_alloc>>1)&1; diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 985cda147fc68774944dbae4680934701760d1a0..c96d277b96551b0308ff70adc1444ede16c60538 100755 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -1382,7 +1382,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra #endif if (abstraction_flag == 0) { - LOG_D(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d : Generating PRACH, preamble %d, TARGET_RECEIVED_POWER %d dBm, PRACH TDD Resource index %d, RA-RNTI %d\n", + LOG_I(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d : Generating PRACH, preamble %d, TARGET_RECEIVED_POWER %d dBm, PRACH TDD Resource index %d, RA-RNTI %d\n", Mod_id, frame_tx, subframe_tx, diff --git a/openair3/NAS/TOOLS/network.h b/openair3/NAS/TOOLS/network.h index 54bf61a7b43c5ec07ae5b469ca10f7be9c13aff8..b2c7977d2d15f91133091d1b50e06987a440bb57 100644 --- a/openair3/NAS/TOOLS/network.h +++ b/openair3/NAS/TOOLS/network.h @@ -58,21 +58,23 @@ Description Defines a list of PLMN network operators #define SFR1 1 #define SFR2 2 #define SFR3 3 -#define TM1 4 -#define FCT1 5 -#define VDF1 6 -#define VDF2 7 -#define VDF3 8 -#define VDF4 9 -#define VDF5 10 +#define OAI_LTEBOX 4 +#define TM1 5 +#define FCT1 6 +#define VDF1 7 +#define VDF2 8 +#define VDF3 9 +#define VDF4 10 +#define VDF5 11 -#define SELECTED_PLMN SFR1 +#define SELECTED_PLMN OAI_LTEBOX //SFR1 #define TEST_PLMN {0,0,0x0f,1,1,0} // 00101 #define SFR_PLMN_1 {0,2,0x0f,8,0,1} // 20810 #define SFR_PLMN_2 {0,2,0x0f,8,1,1} // 20811 #define SFR_PLMN_3 {0,2,0x0f,8,3,1} // 20813 +#define OAI_LTEBOX_PLMN {0,2,0x0f,8,3,9} //20893 #define TM_PLMN_1 {1,3,0,0,8,2} // 310280 #define FCT_PLMN_1 {1,3,8,0,2,0} // 310028 #define VDF_PLMN_1 {2,2,0x0f,2,0,1} // 22210 @@ -81,6 +83,7 @@ Description Defines a list of PLMN network operators #define VDF_PLMN_4 {6,2,0x0f,2,0x0f,2} // 2622 #define VDF_PLMN_5 {6,2,0x0f,2,0x0f,4} // 2624 + /****************************************************************************/ /************************ G L O B A L T Y P E S ************************/ /****************************************************************************/ @@ -110,6 +113,7 @@ network_record_t network_records[] = { {20810, SFR_PLMN_1, "SFR France", "SFR", 0x0001, 0xfffd}, {20811, SFR_PLMN_2, "SFR France", "SFR", 0x0001, 0xfffd}, {20813, SFR_PLMN_3, "SFR France", "SFR", 0x0001, 0xfffd}, + {20893, OAI_LTEBOX_PLMN, "OAI LTEBOX", "OAIALU", 0x0001, 0xfffd}, {310280,TM_PLMN_1, "T-Mobile USA", "T-Mobile", 0x0001, 0xfffd}, {310028,FCT_PLMN_1, "FICTITIOUS USA", "FICTITIO", 0x0001, 0xfffd}, {22210, VDF_PLMN_1, "Vodafone Italia", "VODAFONE", 0x0001, 0xfffd}, diff --git a/openair3/NAS/TOOLS/ue_data.c b/openair3/NAS/TOOLS/ue_data.c index 478119acdaf817d27003539104b18f9d26ee71fe..abfb2ee7733000f9c5ea5377ccfbb779615da5ce 100644 --- a/openair3/NAS/TOOLS/ue_data.c +++ b/openair3/NAS/TOOLS/ue_data.c @@ -354,6 +354,36 @@ static void _gen_emm_data(emm_nvdata_t* data) data->rplmn.MNCdigit2 = 0; data->rplmn.MNCdigit3 = 0xf; #endif +#if (SELECTED_PLMN == OAI_LTEBOX) + /* + * International Mobile Subscriber Identity + * IMSI = MCC + MNC + MSIN = 208 (France) + 93 (OAI) + 00001110 + */ + data->imsi.length = 8; + data->imsi.u.num.parity = ODD_PARITY; // Type of identity = IMSI, even + data->imsi.u.num.digit1 = 2; // MCC digit 1 + data->imsi.u.num.digit2 = 0; // MCC digit 2 + data->imsi.u.num.digit3 = 8; // MCC digit 3 + data->imsi.u.num.digit4 = 9; // MNC digit 1 + data->imsi.u.num.digit5 = 3; // MNC digit 2 + data->imsi.u.num.digit6 = 0; // MNC digit 3 + data->imsi.u.num.digit7 = 1; + data->imsi.u.num.digit8 = 0; + data->imsi.u.num.digit9 = 0; + data->imsi.u.num.digit10 = 0; + data->imsi.u.num.digit11 = 0; + data->imsi.u.num.digit12 = 1; + data->imsi.u.num.digit13 = 1; + data->imsi.u.num.digit14 = 1; + data->imsi.u.num.digit15 = 0; + + data->rplmn.MCCdigit1 = 2; + data->rplmn.MCCdigit2 = 0; + data->rplmn.MCCdigit3 = 8; + data->rplmn.MNCdigit1 = 9; + data->rplmn.MNCdigit2 = 3; + data->rplmn.MNCdigit3 = 0xf; +#endif #if (SELECTED_PLMN == TEST1) /* * International Mobile Subscriber Identity diff --git a/openair3/NAS/TOOLS/usim_data.c b/openair3/NAS/TOOLS/usim_data.c index ea046245edbe0189158324f4764db2ddcfba23cf..624f076c6ee15cf250d5cbca812a9c036ccc3637 100644 --- a/openair3/NAS/TOOLS/usim_data.c +++ b/openair3/NAS/TOOLS/usim_data.c @@ -61,7 +61,7 @@ Description Implements the utility used to generate data stored in the #define KSI USIM_KSI_NOT_AVAILABLE #define KSI_ASME USIM_KSI_NOT_AVAILABLE -#define INT_ALGO USIM_INT_EIA1 +#define INT_ALGO USIM_INT_EIA2 #define ENC_ALGO USIM_ENC_EEA0 #define SECURITY_ALGORITHMS (ENC_ALGO | INT_ALGO) @@ -159,12 +159,13 @@ int main (int argc, const char* argv[]) usim_data.imsi.u.num.digit15 = 0b1111; #endif #if (SELECTED_PLMN == SFR1) -#warning "IMSI 208.10.00001234" + /* * International Mobile Subscriber Identity * IMSI = MCC + MNC + MSIN = 208 (France) + 10 (SFR) + 00001234 */ - #warning "IMSI 208.10.00001234" +#warning "IMSI 208.10.00001234" + usim_data.imsi.length = 8; usim_data.imsi.u.num.parity = EVEN_PARITY; // Parity: even usim_data.imsi.u.num.digit1 = 2; // MCC digit 1 @@ -183,6 +184,31 @@ int main (int argc, const char* argv[]) usim_data.imsi.u.num.digit14 = 4; usim_data.imsi.u.num.digit15 = 0b1111; #endif +#if (SELECTED_PLMN == OAI_LTEBOX) +#warning "IMSI 208.93.00001110" + /* + * International Mobile Subscriber Identity + * IMSI = MCC + MNC + MSIN = 208 (France) + 10 (SFR) + 00001234 + */ + #warning "IMSI 208.93.0100001110" + usim_data.imsi.length = 8; + usim_data.imsi.u.num.parity = ODD_PARITY; // Parity: even + usim_data.imsi.u.num.digit1 = 2; // MCC digit 1 + usim_data.imsi.u.num.digit2 = 0; // MCC digit 2 + usim_data.imsi.u.num.digit3 = 8; // MCC digit 3 + usim_data.imsi.u.num.digit4 = 9; // MNC digit 1 + usim_data.imsi.u.num.digit5 = 3; // MNC digit 2 + usim_data.imsi.u.num.digit6 = 0; // MNC digit 3 + usim_data.imsi.u.num.digit7 = 1; + usim_data.imsi.u.num.digit8 = 0; + usim_data.imsi.u.num.digit9 = 0; + usim_data.imsi.u.num.digit10 = 0; + usim_data.imsi.u.num.digit11 = 0; + usim_data.imsi.u.num.digit12 = 1; + usim_data.imsi.u.num.digit13 = 1; + usim_data.imsi.u.num.digit14 = 1; + usim_data.imsi.u.num.digit15 = 0; +#endif #if (SELECTED_PLMN == TEST1) #warning "IMSI 001.01.000001234" usim_data.imsi.length = 8; @@ -470,13 +496,14 @@ static void _display_usim_data(const usim_data_t* data) printf("\tparity\t= %s\n", 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= %u%u%u%u%u%x%u%u%u%u", data->imsi.u.num.digit1, // MCC digit 1 data->imsi.u.num.digit2, // MCC digit 2 data->imsi.u.num.digit3, // MCC digit 3 data->imsi.u.num.digit4, // MNC digit 1 data->imsi.u.num.digit5, // MNC digit 2 - data->imsi.u.num.digit6, // MNC digit 3 + data->imsi.u.num.digit6==0xf?0:data->imsi.u.num.digit6, // MNC digit 3 data->imsi.u.num.digit7, data->imsi.u.num.digit8, data->imsi.u.num.digit9, diff --git a/openair3/NAS/UE/API/USIM/aka_functions.c b/openair3/NAS/UE/API/USIM/aka_functions.c index 7670cbfc0b9e066f75b718380b8f7e86e13c1ea9..1c30a17bfd505254e1b37436d55dca259a527aab 100644 --- a/openair3/NAS/UE/API/USIM/aka_functions.c +++ b/openair3/NAS/UE/API/USIM/aka_functions.c @@ -21,9 +21,21 @@ /*--------- Operator Variant Algorithm Configuration Field --------*/ /*------- Insert your value of OP here -------*/ /* PFT OP used currently in HSS (OPENAIRHSS/auc/kdf.c) */ +#define OAI_LTEBOX + +#ifdef OAI_LTEBOX +//1006020f0a478bf6b699f15c062e42b3 +/*u8 OP[16] = {0xb3, 0x42, 0x2e, 0x06, 0x5c, 0xf1, 0x99, 0xb6, + 0xf6, 0x8b, 0x47, 0x0a, 0x0f, 0x02, 0x06, 0x10 + };*/ +u8 OP[16] = {0x10, 0x06, 0x02, 0x0f, 0x0a, 0x47, 0x8b, 0xf6, + 0xb6, 0x99, 0xf1, 0x5c, 0x06, 0x2e, 0x42, 0xb3 +}; +#else u8 OP[16] = {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11 }; +#endif /*------- Insert your value of OP here -------*/ /*------------------------------------------------------------------- diff --git a/openair3/NAS/UE/API/USIM/usim_api.c b/openair3/NAS/UE/API/USIM/usim_api.c index 64bc05d0c315b16df1c4cfc00e14401dfc2d42af..eb63cacc6ab6cb01158507fa75772c15e6ed0117 100644 --- a/openair3/NAS/UE/API/USIM/usim_api.c +++ b/openair3/NAS/UE/API/USIM/usim_api.c @@ -77,7 +77,7 @@ Description Implements the API used by the NAS layer to read/write * Subscriber authentication security key */ #define USIM_API_K_SIZE 16 -#define USIM_API_K_VALUE "8BAF473F2F8FD09487CCCBD7097C6862" +#define USIM_API_K_VALUE "fec86ba6eb707ed08905757b1bb44b8f" static uint8_t _usim_api_k[USIM_API_K_SIZE]; @@ -85,9 +85,13 @@ static uint8_t _usim_api_k[USIM_API_K_SIZE]; /* * List of last used Sequence Numbers SQN */ +#define USIM_API_AK_SIZE 6 +#define USIM_API_SQN_SIZE USIM_API_AK_SIZE +#define USIM_API_SQNMS_SIZE USIM_API_SQN_SIZE + static struct _usim_api_data_s { /* Highest sequence number the USIM has ever accepted */ - uint32_t sqn_ms; + uint8_t sqn_ms[USIM_API_SQNMS_SIZE]; /* List of the last used sequence numbers */ #define USIM_API_SQN_LIST_SIZE 32 uint8_t n_sqns; @@ -230,25 +234,25 @@ int usim_api_authenticate(const OctetString* rand_pP, const OctetString* autn_pP /* Compute the cipher key CK = f3K (RAND) */ /* Compute the integrity key IK = f4K (RAND) */ /* Compute the anonymity key AK = f5K (RAND) */ -#define USIM_API_AK_SIZE 6 + u8 ak[USIM_API_AK_SIZE]; f2345(_usim_api_k, rand_pP->value, res_pP->value, ck_pP->value, ik_pP->value, ak); - LOG_TRACE(DEBUG, "USIM-API - res(f2) :%s",dump_octet_string(res_pP)); - LOG_TRACE(DEBUG, "USIM-API - ck(f3) :%s",dump_octet_string(ck_pP)); - LOG_TRACE(DEBUG, "USIM-API - ik(f4) :%s",dump_octet_string(ik_pP)); - LOG_TRACE(DEBUG, "USIM-API - ak(f5) : %02X%02X%02X%02X%02X%02X", + LOG_TRACE(INFO, "USIM-API - res(f2) :%s",dump_octet_string(res_pP)); + LOG_TRACE(INFO, "USIM-API - ck(f3) :%s",dump_octet_string(ck_pP)); + LOG_TRACE(INFO, "USIM-API - ik(f4) :%s",dump_octet_string(ik_pP)); + LOG_TRACE(INFO, "USIM-API - ak(f5) : %02X%02X%02X%02X%02X%02X", ak[0],ak[1],ak[2],ak[3],ak[4],ak[5]); /* Retrieve the sequence number SQN = (SQN ⊕ AK) ⊕ AK */ -#define USIM_API_SQN_SIZE USIM_API_AK_SIZE + u8 sqn[USIM_API_SQN_SIZE]; for (i = 0; i < USIM_API_SQN_SIZE; i++) { sqn[i] = autn_pP->value[i] ^ ak[i]; } - LOG_TRACE(DEBUG, "USIM-API - Retrieved SQN %02X%02X%02X%02X%02X%02X", + LOG_TRACE(INFO, "USIM-API - Retrieved SQN %02X%02X%02X%02X%02X%02X", sqn[0],sqn[1],sqn[2],sqn[3],sqn[4],sqn[5]); /* Compute XMAC = f1K (SQN || RAND || AMF) */ @@ -267,14 +271,15 @@ int usim_api_authenticate(const OctetString* rand_pP, const OctetString* autn_pP USIM_API_XMAC_SIZE) != 0 ) { LOG_TRACE(INFO, "USIM-API - Comparing the XMAC with the MAC included in AUTN Failed"); + rc = RETURNerror; //LOG_FUNC_RETURN (RETURNerror); } else { LOG_TRACE(INFO, "USIM-API - Comparing the XMAC with the MAC included in AUTN Succeeded"); + /* Verify that the received sequence number SQN is in the correct range */ + rc = _usim_api_check_sqn(*(uint32_t*)(sqn), sqn[USIM_API_SQN_SIZE - 1]); } - /* Verify that the received sequence number SQN is in the correct range */ - rc = _usim_api_check_sqn(*(uint32_t*)(sqn), sqn[USIM_API_SQN_SIZE - 1]); if (rc != RETURNok) { /* Synchronisation failure; compute the AUTS parameter */ @@ -283,15 +288,16 @@ int usim_api_authenticate(const OctetString* rand_pP, const OctetString* autn_pP * Conc(SQNMS) = SQNMS ⊕ f5*K(RAND) */ f5star(_usim_api_k, rand_pP->value, ak); -#define USIM_API_SQNMS_SIZE USIM_API_SQN_SIZE + u8 sqn_ms[USIM_API_SQNMS_SIZE]; memset(sqn_ms, 0, USIM_API_SQNMS_SIZE); -#define USIM_API_SQN_MS_SIZE 3 - - for (i = 0; i < USIM_API_SQN_MS_SIZE; i++) { + //#define USIM_API_SQN_MS_SIZE 3 + printf("_usim_api_data.sqn_ms %p\n",_usim_api_data.sqn_ms); + for (i = 0; i < USIM_API_SQNMS_SIZE; i++) { #warning "LG:BUG HERE TODO" + printf("i %d: ((uint8_t*)(_usim_api_data.sqn_ms))[USIM_API_SQNMS_SIZE - i] %d\n",i, ((uint8_t*)(_usim_api_data.sqn_ms))[USIM_API_SQNMS_SIZE - i]); sqn_ms[USIM_API_SQNMS_SIZE - i] = - ((uint8_t*)(_usim_api_data.sqn_ms))[USIM_API_SQN_MS_SIZE - i]; + ((uint8_t*)(_usim_api_data.sqn_ms))[USIM_API_SQNMS_SIZE - i]; } u8 sqnms[USIM_API_SQNMS_SIZE]; @@ -317,6 +323,8 @@ int usim_api_authenticate(const OctetString* rand_pP, const OctetString* autn_pP * AUTS = Conc(SQNMS) || MACS */ memcpy(&auts_pP->value[0], sqnms, USIM_API_SQNMS_SIZE); memcpy(&auts_pP->value[USIM_API_SQNMS_SIZE], macs, USIM_API_MACS_SIZE); + auts_pP->length = USIM_API_SQNMS_SIZE + USIM_API_MACS_SIZE; + LOG_FUNC_RETURN (RETURNerror); } LOG_FUNC_RETURN (RETURNok); diff --git a/openair3/NAS/UE/EMM/Attach.c b/openair3/NAS/UE/EMM/Attach.c index d7bdeb91208bdf4291347ef2515705354e86db06..8a589fa0a0e121b455fce5c343821e0796b6200f 100755 --- a/openair3/NAS/UE/EMM/Attach.c +++ b/openair3/NAS/UE/EMM/Attach.c @@ -249,7 +249,7 @@ int emm_proc_attach(emm_proc_attach_type_t type) esm_sap.data.pdn_connect.is_defined = TRUE; esm_sap.data.pdn_connect.cid = 1; /* TODO: PDN type should be set according to the IP capability of the UE */ - esm_sap.data.pdn_connect.pdn_type = NET_PDN_TYPE_IPV4V6; + esm_sap.data.pdn_connect.pdn_type = NET_PDN_TYPE_IPV4; esm_sap.data.pdn_connect.apn = NULL; esm_sap.data.pdn_connect.is_emergency = _emm_data.is_emergency; rc = esm_sap_send(&esm_sap); diff --git a/targets/ARCH/COMMON/common_lib.c b/targets/ARCH/COMMON/common_lib.c index e4ee06d0a480ac8d86123cd6fe536745a381b360..77c750a53045b2d5ab4729b583997a10890f0827 100644 --- a/targets/ARCH/COMMON/common_lib.c +++ b/targets/ARCH/COMMON/common_lib.c @@ -99,6 +99,7 @@ int load_lib(openair0_device *device, openair0_config_t *openair0_cfg, eth_param void *lib_handle; oai_device_initfunc_t dp ; oai_transport_initfunc_t tp ; + int ret=0; if (flag == BBU_LOCAL_RADIO_HEAD) { lib_handle = dlopen(OAI_RF_LIBNAME, RTLD_LAZY); @@ -110,7 +111,10 @@ int load_lib(openair0_device *device, openair0_config_t *openair0_cfg, eth_param dp = dlsym(lib_handle,"device_init"); if (dp != NULL ) { - dp(device,openair0_cfg); + ret = dp(device,openair0_cfg); + if (ret<0) { + fprintf(stderr, "%s %d:oai device intialization failed %s\n", __FILE__, __LINE__, dlerror()); + } } else { fprintf(stderr, "%s %d:oai device intializing function not found %s\n", __FILE__, __LINE__, dlerror()); return -1; @@ -132,14 +136,14 @@ int load_lib(openair0_device *device, openair0_config_t *openair0_cfg, eth_param } } - return 0; + return ret; } int openair0_device_load(openair0_device *device, openair0_config_t *openair0_cfg) { - int rc; + int rc=0; //ToDo: EXMIMO harmonization is not complete. That is the reason for this ifdef #ifdef EXMIMO device_init(device, openair0_cfg); @@ -152,7 +156,7 @@ int openair0_device_load(openair0_device *device, openair0_config_t *openair0_cf } } #endif - return 0; + return rc; } int openair0_transport_load(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t * eth_params) {