forked from acouzens/open5gs
update it
This commit is contained in:
parent
82813b92e2
commit
cb31d53af7
|
@ -3,30 +3,74 @@
|
|||
#include "core_debug.h"
|
||||
#include "nas_message.h"
|
||||
|
||||
status_t nas_decode_attach_info(
|
||||
nas_attach_info_t *attach_info, pkbuf_t *pkbuf)
|
||||
{
|
||||
c_uint16_t size = 0;
|
||||
|
||||
size = sizeof(nas_attach_info_t);
|
||||
d_assert(pkbuf->len >= size, return CORE_ERROR,
|
||||
"pkbuf->len(%d), size(%d)\n", pkbuf->len, size);
|
||||
memcpy(attach_info, pkbuf->payload, size);
|
||||
pkbuf_header(pkbuf, -size);
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
||||
status_t nas_decode_eps_mobile_identity(
|
||||
nas_eps_mobile_identity_t *eps_mobile_identity, pkbuf_t *pkbuf)
|
||||
{
|
||||
c_uint16_t size = 0;
|
||||
nas_eps_mobile_identity_t *header = pkbuf->payload;
|
||||
|
||||
size = header->len + sizeof(header->len);
|
||||
d_assert(pkbuf->len >= size, return CORE_ERROR,
|
||||
"pkbuf->len(%d), size(%d)\n", pkbuf->len, size);
|
||||
memcpy(eps_mobile_identity, pkbuf->payload, size);
|
||||
|
||||
if (header->type_of_identity == NAS_EPS_MOBILE_IDENTITY_GUTI)
|
||||
{
|
||||
eps_mobile_identity->u.guti.mme_group_id =
|
||||
ntohs(eps_mobile_identity->u.guti.mme_group_id);
|
||||
eps_mobile_identity->u.guti.m_tmsi =
|
||||
ntohl(eps_mobile_identity->u.guti.m_tmsi);
|
||||
}
|
||||
|
||||
pkbuf_header(pkbuf, -size);
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
||||
status_t nas_decode_ue_network_capability(
|
||||
nas_ue_network_capability_t *ue_network_capability, pkbuf_t *pkbuf)
|
||||
{
|
||||
c_uint16_t size = 0;
|
||||
nas_ue_network_capability_t *header = pkbuf->payload;
|
||||
|
||||
size = header->len + sizeof(header->len);
|
||||
d_assert(pkbuf->len >= size, return CORE_ERROR,
|
||||
"pkbuf->len(%d), size(%d)\n", pkbuf->len, size);
|
||||
memcpy(ue_network_capability, pkbuf->payload, size);
|
||||
pkbuf_header(pkbuf, -size);
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
||||
status_t nas_decode_attach_request(nas_message_t *message, pkbuf_t *pkbuf)
|
||||
{
|
||||
#if 0
|
||||
nas_attach_info_t *attach_info = NULL;
|
||||
#endif
|
||||
nas_eps_mobile_identity_t *eps_mobile_identity = NULL;
|
||||
nas_ue_network_capability_t *ue_network_capability = NULL;
|
||||
nas_esm_message_container_t *esm_message_container = NULL;
|
||||
nas_attach_request_t *attach_request = &message->emm.attach_request;
|
||||
status_t rv;
|
||||
|
||||
#if 0
|
||||
attach_info = pkbuf->payload;
|
||||
#endif
|
||||
pkbuf_header(pkbuf,
|
||||
-(c_int16_t)(sizeof(nas_attach_info_t)));
|
||||
eps_mobile_identity = pkbuf->payload;
|
||||
pkbuf_header(pkbuf, -(c_uint16_t)(sizeof(eps_mobile_identity->len) +
|
||||
eps_mobile_identity->len));
|
||||
ue_network_capability = pkbuf->payload;
|
||||
pkbuf_header(pkbuf, -(c_int16_t)(sizeof(ue_network_capability->len) +
|
||||
ue_network_capability->len));
|
||||
rv = nas_decode_attach_info(&attach_request->attach_info, pkbuf);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "decode failed");
|
||||
|
||||
esm_message_container = pkbuf->payload;
|
||||
pkbuf_header(pkbuf, -(c_int16_t)(sizeof(esm_message_container->len) +
|
||||
esm_message_container->len));
|
||||
rv = nas_decode_eps_mobile_identity(
|
||||
&attach_request->eps_mobile_identity, pkbuf);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "decode failed");
|
||||
|
||||
rv = nas_decode_ue_network_capability(
|
||||
&attach_request->ue_network_capability, pkbuf);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "decode failed");
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
|
|
@ -102,52 +102,53 @@ ED4(c_uint8_t tsc:1;,
|
|||
c_uint8_t attach_type:3;)
|
||||
} __attribute__ ((packed)) nas_attach_info_t;
|
||||
|
||||
#define NAS_EPS_MOBILE_IDENTITY_IMSI 1
|
||||
#define NAS_EPS_MOBILE_IDENTITY_GUTI 6
|
||||
#define NAS_EPS_MOBILE_IDENTITY_IMEI 3
|
||||
|
||||
#define NAS_EPS_MOBILE_IDENTITY_EVEN 0
|
||||
#define NAS_EPS_MOBILE_IDENTITY_ODD 1
|
||||
typedef struct _nas_eps_mobile_identity_guti_t {
|
||||
ED3(c_uint8_t spare:4;,
|
||||
c_uint8_t odd_even:1;,
|
||||
c_uint8_t type_of_identity:3;)
|
||||
ED2(c_uint8_t mcc_digit2:4;,
|
||||
c_uint8_t mcc_digit1:4;)
|
||||
ED2(c_uint8_t mnc_digit3:4;,
|
||||
c_uint8_t mcc_digit3:4;)
|
||||
ED2(c_uint8_t mnc_digit2:4;,
|
||||
c_uint8_t mnc_digit1:4;)
|
||||
ED2(c_uint8_t mcc_digit2:4;,
|
||||
c_uint8_t mcc_digit1:4;)
|
||||
ED2(c_uint8_t mnc_digit3:4;,
|
||||
c_uint8_t mcc_digit3:4;)
|
||||
ED2(c_uint8_t mnc_digit2:4;,
|
||||
c_uint8_t mnc_digit1:4;)
|
||||
c_uint16_t mme_group_id;
|
||||
c_uint8_t mme_code;
|
||||
c_uint32_t m_tmsi;
|
||||
} __attribute__ ((packed)) nas_eps_mobile_identity_guti_t;
|
||||
|
||||
typedef struct _nas_eps_mobile_identity_imsi_t {
|
||||
ED3(c_uint8_t identity_digit1:4;,
|
||||
c_uint8_t odd_even:1;,
|
||||
c_uint8_t type_of_identity:3;)
|
||||
ED2(c_uint8_t identity_digit2:4;,
|
||||
c_uint8_t identity_digit3:4;)
|
||||
ED2(c_uint8_t identity_digit4:4;,
|
||||
c_uint8_t identity_digit5:4;)
|
||||
ED2(c_uint8_t identity_digit6:4;,
|
||||
c_uint8_t identity_digit7:4;)
|
||||
ED2(c_uint8_t identity_digit8:4;,
|
||||
c_uint8_t identity_digit9:4;)
|
||||
ED2(c_uint8_t identity_digit10:4;,
|
||||
c_uint8_t identity_digit11:4;)
|
||||
ED2(c_uint8_t identity_digit12:4;,
|
||||
c_uint8_t identity_digit13:4;)
|
||||
ED2(c_uint8_t identity_digit14:4;,
|
||||
c_uint8_t identity_digit15:4;)
|
||||
ED2(c_uint8_t digit2:4;,
|
||||
c_uint8_t digit3:4;)
|
||||
ED2(c_uint8_t digit4:4;,
|
||||
c_uint8_t digit5:4;)
|
||||
ED2(c_uint8_t digit6:4;,
|
||||
c_uint8_t digit7:4;)
|
||||
ED2(c_uint8_t digit8:4;,
|
||||
c_uint8_t digit9:4;)
|
||||
ED2(c_uint8_t digit10:4;,
|
||||
c_uint8_t digit11:4;)
|
||||
ED2(c_uint8_t digit12:4;,
|
||||
c_uint8_t digit13:4;)
|
||||
ED2(c_uint8_t digit14:4;,
|
||||
c_uint8_t digit15:4;)
|
||||
} __attribute__ ((packed)) nas_eps_mobile_identity_imsi_t;
|
||||
|
||||
typedef nas_eps_mobile_identity_imsi_t nas_eps_mobile_identity_imei_t;
|
||||
|
||||
typedef struct _nas_eps_mobile_identity_t {
|
||||
c_uint8_t len;
|
||||
ED3(c_uint8_t digit1:4;,
|
||||
c_uint8_t odd_even:1;,
|
||||
c_uint8_t type_of_identity:3;)
|
||||
union {
|
||||
nas_eps_mobile_identity_imsi_t imsi;
|
||||
nas_eps_mobile_identity_guti_t guti;
|
||||
nas_eps_mobile_identity_imei_t imei;
|
||||
} i;
|
||||
} u;
|
||||
} __attribute__ ((packed)) nas_eps_mobile_identity_t;
|
||||
|
||||
typedef struct _nas_ue_network_capability_t {
|
||||
|
|
Loading…
Reference in New Issue