Add IMEISV(MEI) in Create Session Request

This commit is contained in:
Sukchan Lee 2019-11-18 20:21:20 +09:00
parent 552305afe2
commit 7b7acea59b
5 changed files with 23 additions and 24 deletions

View File

@ -41,6 +41,8 @@ extern "C" {
OGS_BCD_TO_BUFFER_LEN(OGS_MAX_IMSI_BCD_LEN)
#define OGS_MAX_IMEISV_BCD_LEN 16
#define OGS_MAX_IMEISV_LEN \
OGS_BCD_TO_BUFFER_LEN(OGS_MAX_IMEISV_BCD_LEN)
#define OGS_MAX_NUM_OF_HOSTNAME 16
#define OGS_MAX_APN_LEN 100

View File

@ -30,18 +30,13 @@ void *ogs_ascii_to_hex(char *in, int in_len, void *out, int out_len)
int i = 0, j = 0, k = 0, hex;
uint8_t *out_p = out;
while(i < in_len && j < out_len)
{
if (!isspace(in[i]))
{
while(i < in_len && j < out_len) {
if (!isspace(in[i])) {
hex = isdigit(in[i]) ? in[i] - '0' :
islower(in[i]) ? in[i] - 'a' + 10 : in[i] - 'A' + 10;
if ((k & 0x1) == 0)
{
if ((k & 0x1) == 0) {
out_p[j] = (hex << 4);
}
else
{
} else {
out_p[j] |= hex;
j++;
}
@ -62,8 +57,7 @@ void *ogs_hex_to_ascii(void *in, int in_len, void *out, int out_len)
p[0] = 0;
l = (in_len - off) > out_len ? out_len : in_len - off;
for (i = 0; i < l; i++)
{
for (i = 0; i < l; i++) {
p += sprintf(p, "%02X", ((char*)in)[off+i] & 0xff);
if ((i & 0x3) == 3 && (i != (l-1))) p += sprintf(p, " ");
}
@ -87,8 +81,7 @@ uint64_t ogs_buffer_to_uint64(void *buffer, int size)
uint8_t *buffer_p = buffer;
int i;
for (i = 0; i < size; i++)
{
for (i = 0; i < size; i++) {
num |= (((uint64_t)buffer_p[i]) << ((size-1-i) * 8));
}
@ -101,8 +94,7 @@ void *ogs_bcd_to_buffer(const char *in, void *out, int *out_len)
uint8_t *out_p = out;
int in_len = strlen(in);
for (i = 0; i < in_len; i++)
{
for (i = 0; i < in_len; i++) {
if (i & 0x01)
out_p[i>>1] = out_p[i>>1] | (((in[i] - 0x30) << 4) & 0xF0);
else
@ -110,8 +102,7 @@ void *ogs_bcd_to_buffer(const char *in, void *out, int *out_len)
}
*out_len = (in_len + 1) / 2;
if (in_len & 0x01)
{
if (in_len & 0x01) {
out_p[(*out_len)-1] |= 0xF0;
}
@ -123,19 +114,15 @@ void *ogs_buffer_to_bcd(uint8_t *in, int in_len, void *out)
int i = 0;
uint8_t *out_p = out;
for (i = 0; i < in_len-1; i++)
{
for (i = 0; i < in_len-1; i++) {
out_p[i*2] = 0x30 + (in[i] & 0x0F);
out_p[i*2+1] = 0x30 + ((in[i] & 0xF0) >> 4);
}
if ((in[i] & 0xF0) == 0xF0)
{
if ((in[i] & 0xF0) == 0xF0) {
out_p[i*2] = 0x30 + (in[i] & 0x0F);
out_p[i*2+1] = 0;
}
else
{
} else {
out_p[i*2] = 0x30 + (in[i] & 0x0F);
out_p[i*2+1] = 0x30 + ((in[i] & 0xF0) >> 4);
out_p[i*2+2] = 0;

View File

@ -635,6 +635,8 @@ int emm_handle_security_mode_complete(mme_ue_t *mme_ue,
&imeisv->imeisv, imeisv->length);
ogs_nas_imeisv_to_bcd(&imeisv->imeisv, imeisv->length,
mme_ue->imeisv_bcd);
ogs_bcd_to_buffer(mme_ue->imeisv_bcd,
mme_ue->imeisv, &mme_ue->imeisv_len);
mme_ue->imeisv_presence = true;
break;
default:

View File

@ -306,6 +306,8 @@ struct mme_ue_s {
ogs_nas_mobile_identity_imsi_t nas_mobile_identity_imsi;
bool imeisv_presence;
uint8_t imeisv[OGS_MAX_IMEISV_LEN];
int imeisv_len;
char imeisv_bcd[OGS_MAX_IMEISV_BCD_LEN+1];
ogs_nas_mobile_identity_imeisv_t nas_mobile_identity_imeisv;

View File

@ -61,6 +61,12 @@ int mme_s11_build_create_session_request(
req->imsi.data = mme_ue->imsi;
req->imsi.len = mme_ue->imsi_len;
if (mme_ue->imeisv_presence) {
req->me_identity.presence = 1;
req->me_identity.data = mme_ue->imeisv;
req->me_identity.len = mme_ue->imeisv_len;
}
memset(&uli, 0, sizeof(ogs_gtp_uli_t));
uli.flags.e_cgi = 1;
uli.flags.tai = 1;