Add number of slices to decoding of NSSAI

This commit is contained in:
Guido Casati
2025-04-15 19:54:23 +02:00
parent 51661bd83c
commit c6271a23e4
2 changed files with 6 additions and 3 deletions
@@ -70,7 +70,7 @@ static int encode_fgs_registration_result(byte_array_t buffer, const registratio
/** /**
* @brief Allowed NSSAI from Registration Accept according to 3GPP TS 24.501 Table 8.2.7.1.1 * @brief Allowed NSSAI from Registration Accept according to 3GPP TS 24.501 Table 8.2.7.1.1
*/ */
static int decode_nssai_ie(nr_nas_msg_snssai_t *nssai, const uint8_t *buf) static int decode_nssai_ie(nr_nas_msg_snssai_t *nssai, uint8_t *num_slices, uint8_t *buf)
{ {
const int length = *buf; // Length of S-NSSAI IE contents (list of S-NSSAIs) const int length = *buf; // Length of S-NSSAI IE contents (list of S-NSSAIs)
const uint32_t decoded = length + 1; // Length IE (1 octet) const uint32_t decoded = length + 1; // Length IE (1 octet)
@@ -123,6 +123,7 @@ static int decode_nssai_ie(nr_nas_msg_snssai_t *nssai, const uint8_t *buf)
break; break;
} }
} }
*num_slices = nssai_cnt;
return decoded; return decoded;
} }
@@ -159,12 +160,12 @@ size_t decode_registration_accept(registration_accept_msg *registration_accept,
switch (iei) { switch (iei) {
case 0x15: // allowed NSSAI case 0x15: // allowed NSSAI
dec = decode_nssai_ie(registration_accept->nas_allowed_nssai, ba.buf); dec = decode_nssai_ie(registration_accept->nas_allowed_nssai, &registration_accept->num_allowed_slices, ba.buf);
UPDATE_BYTE_ARRAY(ba, dec); UPDATE_BYTE_ARRAY(ba, dec);
break; break;
case 0x31: // configured NSSAI case 0x31: // configured NSSAI
dec = decode_nssai_ie(registration_accept->config_nssai, ba.buf); dec = decode_nssai_ie(registration_accept->config_nssai, &registration_accept->num_configured_slices, ba.buf);
UPDATE_BYTE_ARRAY(ba, dec); UPDATE_BYTE_ARRAY(ba, dec);
break; break;
@@ -71,8 +71,10 @@ typedef struct registration_accept_msg_tag {
FGSMobileIdentity *guti; FGSMobileIdentity *guti;
// Allowed NSSAI (Optional) // Allowed NSSAI (Optional)
nr_nas_msg_snssai_t nas_allowed_nssai[NAS_MAX_NUMBER_SLICES]; nr_nas_msg_snssai_t nas_allowed_nssai[NAS_MAX_NUMBER_SLICES];
uint8_t num_allowed_slices;
// Configured NSSAI (Optional) // Configured NSSAI (Optional)
nr_nas_msg_snssai_t config_nssai[NAS_MAX_NUMBER_SLICES]; nr_nas_msg_snssai_t config_nssai[NAS_MAX_NUMBER_SLICES];
uint8_t num_configured_slices;
} registration_accept_msg; } registration_accept_msg;
size_t decode_registration_accept(registration_accept_msg *registrationaccept, const byte_array_t buffer); size_t decode_registration_accept(registration_accept_msg *registrationaccept, const byte_array_t buffer);