Merge branch 'develop1B' of https://gitlab.eurecom.fr/oai1B/openairinterface5g into bugfix-44
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user