Merge branch 'develop1B' of https://gitlab.eurecom.fr/oai1B/openairinterface5g into bugfix-44

This commit is contained in:
hbilel
2016-12-13 12:27:41 +01:00
331 changed files with 40378 additions and 1567 deletions
+42 -12
View File
@@ -41,10 +41,24 @@ int decode_emergency_number_list(EmergencyNumberList *emergencynumberlist, uint8
ielen = *(buffer + decoded);
decoded++;
CHECK_LENGTH_DECODER(len - decoded, ielen);
emergencynumberlist->lengthofemergency = *(buffer + decoded);
decoded++;
emergencynumberlist->emergencyservicecategoryvalue = *(buffer + decoded) & 0x1f;
decoded++;
int information_element_index = 0;
while ((decoded < ielen) && (information_element_index < EMERGENCY_NUMBER_LIST_MAX_NUMBER_INFORMATION)) {
emergencynumberlist->emergency_number_information[information_element_index].lengthofemergency = *(buffer + decoded);
decoded++;
emergencynumberlist->emergency_number_information[information_element_index].emergencyservicecategoryvalue = *(buffer + decoded) & 0x1f;
decoded++;
int remaining_len = emergencynumberlist->emergency_number_information[information_element_index].lengthofemergency - 1;
int digit_index = 0;
while (remaining_len > 0) {
emergencynumberlist->emergency_number_information[information_element_index].bcd_digits[digit_index++] = *(buffer + decoded);
decoded++;
remaining_len --;
}
while (digit_index < EMERGENCY_NUMBER_LIST_MAX_2DIGITS) {
emergencynumberlist->emergency_number_information[information_element_index].bcd_digits[digit_index++] = 0xFF;
}
information_element_index++;
}
#if defined (NAS_DEBUG)
dump_emergency_number_list_xml(emergencynumberlist, iei);
#endif
@@ -67,11 +81,16 @@ int encode_emergency_number_list(EmergencyNumberList *emergencynumberlist, uint8
lenPtr = (buffer + encoded);
encoded ++;
*(buffer + encoded) = emergencynumberlist->lengthofemergency;
encoded++;
*(buffer + encoded) = 0x00 |
(emergencynumberlist->emergencyservicecategoryvalue & 0x1f);
encoded++;
for ( int ie_index = 0; ie_index < emergencynumberlist->num_emergency_elements; ie_index++) {
*(buffer + encoded) = emergencynumberlist->emergency_number_information[ie_index].lengthofemergency;
encoded++;
*(buffer + encoded) = 0x00 |
(emergencynumberlist->emergency_number_information[ie_index].emergencyservicecategoryvalue & 0x1f);
encoded++;
for (int bcd2_index = 0; bcd2_index < (emergencynumberlist->emergency_number_information[ie_index].lengthofemergency - 1); bcd2_index++) {
*(buffer + encoded) = emergencynumberlist->emergency_number_information[ie_index].bcd_digits[bcd2_index];
}
}
*lenPtr = encoded - 1 - ((iei > 0) ? 1 : 0);
return encoded;
}
@@ -83,9 +102,20 @@ void dump_emergency_number_list_xml(EmergencyNumberList *emergencynumberlist, ui
if (iei > 0)
/* Don't display IEI if = 0 */
printf(" <IEI>0x%X</IEI>\n", iei);
printf(" <Length of emergency>%u</Length of emergency>\n", emergencynumberlist->lengthofemergency);
printf(" <Emergency service category value>%u</Emergency service category value>\n", emergencynumberlist->emergencyservicecategoryvalue);
for ( int ie_index = 0; ie_index < emergencynumberlist->num_emergency_elements; ie_index++) {
printf(" <Length of emergency>%u</Length of emergency>\n", emergencynumberlist->emergency_number_information[ie_index].lengthofemergency);
printf(" <Emergency service category value>%u</Emergency service category value>\n", emergencynumberlist->emergency_number_information[ie_index].emergencyservicecategoryvalue);
for (int bcd2_index = 0; bcd2_index < (emergencynumberlist->emergency_number_information[ie_index].lengthofemergency - 1); bcd2_index++) {
uint8_t bcd1 = emergencynumberlist->emergency_number_information[ie_index].bcd_digits[bcd2_index] & 0x0f;
uint8_t bcd2 = (emergencynumberlist->emergency_number_information[ie_index].bcd_digits[bcd2_index] & 0xf0) >> 4;
if (bcd1 < 10) {
printf(" <BCD Digit%u>%u</BCD Digit%u>\n", (bcd2_index*2)+1, bcd1, (bcd2_index*2)+1);
if (bcd2 < 10) {
printf(" <BCD Digit%u>%u</BCD Digit%u>\n", (bcd2_index*2)+2, bcd2, (bcd2_index*2)+2);
}
}
}
}
printf("</Emergency Number List>\n");
}
@@ -32,8 +32,14 @@
#define EMERGENCY_NUMBER_LIST_MAXIMUM_LENGTH 50
typedef struct EmergencyNumberList_tag {
uint8_t lengthofemergency;
uint8_t emergencyservicecategoryvalue:5;
uint8_t num_emergency_elements;
struct {
uint8_t lengthofemergency;
uint8_t emergencyservicecategoryvalue:5;
#define EMERGENCY_NUMBER_LIST_MAX_2DIGITS 6
uint8_t bcd_digits[EMERGENCY_NUMBER_LIST_MAX_2DIGITS]; // length to be fixed
#define EMERGENCY_NUMBER_LIST_MAX_NUMBER_INFORMATION 2
} emergency_number_information[EMERGENCY_NUMBER_LIST_MAX_NUMBER_INFORMATION];
} EmergencyNumberList;
int encode_emergency_number_list(EmergencyNumberList *emergencynumberlist, uint8_t iei, uint8_t *buffer, uint32_t len);
+10 -5
View File
@@ -575,6 +575,8 @@ static int encode_imei_mobile_identity(ImeiMobileIdentity_t *imei, uint8_t *buff
static int encode_imeisv_mobile_identity(ImeisvMobileIdentity_t *imeisv, uint8_t *buffer)
{
uint32_t encoded = 0;
LOG_TRACE(INFO,"SECURITY MODE COMMAND COMPLETE: encode_imeisv_mobile_identity \n");
*(buffer + encoded) = 0x00 | (imeisv->digit1 << 4) | (imeisv->oddeven << 3) |
(imeisv->typeofidentity);
encoded++;
@@ -590,12 +592,15 @@ static int encode_imeisv_mobile_identity(ImeisvMobileIdentity_t *imeisv, uint8_t
encoded++;
*(buffer + encoded) = 0x00 | (imeisv->digit13 << 4) | imeisv->digit12;
encoded++;
*(buffer + encoded) = 0x00 | (imeisv->digit15 << 4) | imeisv->digit14;
encoded++;
*(buffer + encoded) = 0x00 | (imeisv->parity << 4) | imeisv->digit16;
if (imeisv->oddeven != MOBILE_IDENTITY_EVEN) {
*(buffer + encoded) = 0x00 | (imeisv->digit15 << 4) | imeisv->digit14;
} else {
*(buffer + encoded) = 0xf0 | imeisv->digit14;
}
//if (imeisv->oddeven != MOBILE_IDENTITY_EVEN) {
// *(buffer + encoded) = 0x00 | (imeisv->digit15 << 4) | imeisv->digit14;
//} else {
// *(buffer + encoded) = 0xf0 | imeisv->digit14;
//}
encoded++;
return encoded;
+56 -1
View File
@@ -73,8 +73,63 @@ typedef struct {
uint8_t mbmssessionid;
} TmgiMobileIdentity_t;
typedef struct imeisv_s{
uint8_t digit1:4;
uint8_t oddeven:1;
uint8_t typeofidentity:3;
uint8_t digit2:4;
uint8_t digit3:4;
uint8_t digit4:4;
uint8_t digit5:4;
uint8_t digit6:4;
uint8_t digit7:4;
uint8_t digit8:4;
uint8_t digit9:4;
uint8_t digit10:4;
uint8_t digit11:4;
uint8_t digit12:4;
uint8_t digit13:4;
uint8_t digit14:4;
uint8_t digit15:4;
uint8_t digit16:4;
#define EVEN_PARITY 0
#define IMEI_ODD_PARITY 0xf
uint8_t parity:4;
} imeisv_t;
#if 0
typedef struct imeisv_s {
uint8_t length;
union {
struct {
uint8_t tac2:4;
uint8_t tac1:4;
uint8_t tac4:4;
uint8_t tac3:4;
uint8_t tac6:4;
uint8_t tac5:4;
uint8_t tac8:4;
uint8_t tac7:4;
uint8_t snr2:4;
uint8_t snr1:4;
uint8_t snr4:4;
uint8_t snr3:4;
uint8_t snr6:4;
uint8_t snr5:4;
uint8_t svn2:4;
uint8_t svn1:4;
#define EVEN_PARITY 0
#define IMEI_ODD_PARITY 0xf
uint8_t parity:4;
} num;
#define IMEISV_BCD8_SIZE 9
uint8_t value[IMEISV_BCD8_SIZE];
} u;
} imeisv_t;
#endif
typedef ImsiMobileIdentity_t ImeiMobileIdentity_t;
typedef ImsiMobileIdentity_t ImeisvMobileIdentity_t;
typedef imeisv_t ImeisvMobileIdentity_t;
typedef ImsiMobileIdentity_t TmsiMobileIdentity_t;
typedef ImsiMobileIdentity_t NoMobileIdentity_t;