diff --git a/openair3/NAS/NR_UE/nr_nas_msg_sim.c b/openair3/NAS/NR_UE/nr_nas_msg_sim.c index b896996c36..48b814eb27 100644 --- a/openair3/NAS/NR_UE/nr_nas_msg_sim.c +++ b/openair3/NAS/NR_UE/nr_nas_msg_sim.c @@ -52,6 +52,7 @@ #include #include "openair2/SDAP/nr_sdap/nr_sdap.h" #include "openair3/SECU/nas_stream_eia2.h" +#include "openair3/UTILS/conversions.h" uint8_t *registration_request_buf; uint32_t registration_request_len; @@ -937,14 +938,14 @@ static void parse_allowed_nssai(nr_nas_msg_snssai_t nssaiList[8], const uint8_t case 4: nssai->sst = *buf++; - nssai->sd = 0xffffff & (buf[2] | buf[1] << 8 | buf[0] << 16); + nssai->sd = 0xffffff & ntoh_int24_buf(buf); buf += 3; nssai_cnt++; break; case 5: nssai->sst = *buf++; - nssai->sd = 0xffffff & (buf[2] | buf[1] << 8 | buf[0] << 16); + nssai->sd = 0xffffff & ntoh_int24_buf(buf); buf += 3; nssai->hplmn_sst = *buf++; nssai_cnt++; @@ -952,10 +953,10 @@ static void parse_allowed_nssai(nr_nas_msg_snssai_t nssaiList[8], const uint8_t case 8: nssai->sst = *buf++; - nssai->sd = 0xffffff & (buf[2] | buf[1] << 8 | buf[0] << 16); + nssai->sd = 0xffffff & ntoh_int24_buf(buf); buf += 3; nssai->hplmn_sst = *buf++; - nssai->hplmn_sd = 0xffffff & (buf[2] | buf[1] << 8 | buf[0] << 16); + nssai->hplmn_sd = 0xffffff & ntoh_int24_buf(buf); buf += 3; nssai_cnt++; break; diff --git a/openair3/UTILS/conversions.h b/openair3/UTILS/conversions.h index bf24c9f4ee..e188909713 100644 --- a/openair3/UTILS/conversions.h +++ b/openair3/UTILS/conversions.h @@ -41,6 +41,9 @@ # define hton_int16(x) (x) #endif +#define ntoh_int24_buf(bUF) \ + ((*bUF << 16) | ((*(bUF + 1)) << 8) | (*(bUF + 2))) + #define IN_ADDR_TO_BUFFER(X,bUFF) INT32_TO_BUFFER((X).s_addr,(char*)bUFF) #define IN6_ADDR_TO_BUFFER(X,bUFF) \