asn1helpers: Fix 24 bit conversion function and use it in hnbgw_hnbap
The 32 bit int needs to be shifted left one byte so the correct bytes end up at the beginning of the bit string buffer.
This commit is contained in:
parent
4e31250367
commit
9224731379
|
@ -43,7 +43,7 @@ void asn1_u28_to_bitstring(BIT_STRING_t *bitstr, uint32_t *buf, uint32_t in)
|
|||
|
||||
void asn1_u24_to_bitstring(BIT_STRING_t *bitstr, uint32_t *buf, uint32_t in)
|
||||
{
|
||||
*buf = htonl(in);
|
||||
*buf = htonl(in<<8);
|
||||
bitstr->buf = (uint8_t *) buf;
|
||||
bitstr->size = 24/8;
|
||||
bitstr->bits_unused = 0;
|
||||
|
@ -106,5 +106,5 @@ uint32_t asn1bitstr_to_u24(const BIT_STRING_t *in)
|
|||
{
|
||||
OSMO_ASSERT(in && in->size == 3);
|
||||
|
||||
return *(uint32_t *)in->buf;
|
||||
return ntohl(*(uint32_t *)in->buf) >> 8;
|
||||
}
|
||||
|
|
|
@ -79,6 +79,7 @@ static int hnbgw_tx_ue_register_acc(struct ue_context *ue)
|
|||
UERegisterAcceptIEs_t accept;
|
||||
struct msgb *msg;
|
||||
uint8_t encoded_imsi[10];
|
||||
uint32_t ctx_id;
|
||||
size_t encoded_imsi_len;
|
||||
int rc;
|
||||
|
||||
|
@ -89,8 +90,7 @@ static int hnbgw_tx_ue_register_acc(struct ue_context *ue)
|
|||
accept.uE_Identity.present = UE_Identity_PR_iMSI;
|
||||
OCTET_STRING_fromBuf(&accept.uE_Identity.choice.iMSI,
|
||||
(const char *)encoded_imsi, encoded_imsi_len);
|
||||
asn1_u32_to_bitstring(&accept.context_ID, &ue->context_id);
|
||||
accept.context_ID.size = 3; /* 24bit field */
|
||||
asn1_u24_to_bitstring(&accept.context_ID, &ctx_id, ue->context_id);
|
||||
|
||||
memset(&accept_out, 0, sizeof(accept_out));
|
||||
rc = hnbap_encode_ueregisteraccepties(&accept_out, &accept);
|
||||
|
|
Loading…
Reference in New Issue