Commit c57dd5b5 authored by Tien Thinh NGUYEN's avatar Tien Thinh NGUYEN

Update Nssai Inclusion Mode

parent 911008f6
...@@ -89,6 +89,7 @@ constexpr uint8_t kIeiShortNameForNetwork = 0x45; ...@@ -89,6 +89,7 @@ constexpr uint8_t kIeiShortNameForNetwork = 0x45;
constexpr uint8_t kIeiPayloadContainerType = 0x08; // Should be verified constexpr uint8_t kIeiPayloadContainerType = 0x08; // Should be verified
constexpr uint8_t kIeiNetworkSlicingIndication = 0x09; // 9-(4 higher bits) constexpr uint8_t kIeiNetworkSlicingIndication = 0x09; // 9-(4 higher bits)
constexpr uint8_t kIeiNssaiInclusionMode = 0x0A; // B-(4 higher bits)
constexpr uint8_t kIeiMicoIndication = 0x0B; // B-(4 higher bits) constexpr uint8_t kIeiMicoIndication = 0x0B; // B-(4 higher bits)
constexpr uint8_t kIeiNasKeySetIdentifier = 0x0C; // C-(4 higher bits) constexpr uint8_t kIeiNasKeySetIdentifier = 0x0C; // C-(4 higher bits)
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
#include "NasMessageContainer.hpp" #include "NasMessageContainer.hpp"
#include "NAS_Security_Algorithms.hpp" #include "NAS_Security_Algorithms.hpp"
#include "NSSAI.hpp" #include "NSSAI.hpp"
#include "NSSAI_Inclusion_Mode.hpp" #include "NssaiInclusionMode.hpp"
#include "NasKeySetIdentifier.hpp" #include "NasKeySetIdentifier.hpp"
#include "Non_3GPP_NW_Provided_Policies.hpp" #include "Non_3GPP_NW_Provided_Policies.hpp"
#include "PDU_Session_Identity_2.hpp" #include "PDU_Session_Identity_2.hpp"
......
...@@ -26,72 +26,33 @@ ...@@ -26,72 +26,33 @@
\email: contact@openairinterface.org \email: contact@openairinterface.org
*/ */
#include "NSSAI_Inclusion_Mode.hpp" #include "NssaiInclusionMode.hpp"
#include "logger.hpp" #include "logger.hpp"
using namespace nas; using namespace nas;
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
NSSAI_Inclusion_Mode::NSSAI_Inclusion_Mode(const uint8_t iei, uint8_t value) { NssaiInclusionMode::NssaiInclusionMode()
_iei = iei; : Type1NasIeFormatTv(kIeiNssaiInclusionMode) {
_value = value; SetIeName(kNssaiInclusionModeIeName);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
NSSAI_Inclusion_Mode::NSSAI_Inclusion_Mode() {} NssaiInclusionMode::NssaiInclusionMode(uint8_t value)
: Type1NasIeFormatTv(kIeiNssaiInclusionMode) {
//------------------------------------------------------------------------------ SetValue(value);
NSSAI_Inclusion_Mode::~NSSAI_Inclusion_Mode(){}; SetIeName(kNssaiInclusionModeIeName);
//------------------------------------------------------------------------------
void NSSAI_Inclusion_Mode::setValue(const uint8_t value) {
_value = value;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
uint8_t NSSAI_Inclusion_Mode::getValue() { NssaiInclusionMode::~NssaiInclusionMode(){};
return _value;
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int NSSAI_Inclusion_Mode::Encode(uint8_t* buf, int len) { void NssaiInclusionMode::setValue(const uint8_t value) {
Logger::nas_mm().debug("Encoding NSSAI_Inclusion_Mode IE iei (0x%x)", _iei); SetValue(value);
if (len < 1) {
Logger::nas_mm().error("Len is less than one");
return -1;
} else {
uint8_t octet = 0;
if (!(_iei & 0x0f)) {
// octet = (0x0f) & ((tsc << 3) | key_id);
//*buf = octet;
// Logger::nas_mm().debug("encoded Payload_Container_Type IE(len(1/2
// octet))"); return 0;
} else {
octet = (_iei << 4) | (_value & 0x0f);
*buf = octet;
Logger::nas_mm().debug("Encoded NSSAI_Inclusion_Mode IE(len, 1 octet)");
return 1;
}
}
return 1;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int NSSAI_Inclusion_Mode::Decode(uint8_t* buf, int len, bool is_option) { uint8_t NssaiInclusionMode::getValue() const {
Logger::nas_mm().debug("Decoding NSSAI_Inclusion_Mode IE"); return GetValue();
if (len < 1) {
Logger::nas_mm().error("Len is less than one");
return 0;
} else {
uint8_t octet = (*buf);
if (is_option) {
_iei = (octet & 0xf0) >> 4;
} else {
_iei = 0;
}
_value = octet & 0x0f;
Logger::nas_mm().debug(
"Decoded NSSAI_Inclusion_Mode iei (0x%x) value (0x%x)", _iei, _value);
return 1;
}
} }
...@@ -19,33 +19,30 @@ ...@@ -19,33 +19,30 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file #ifndef _NSSAI_INCLUSION_MODE_H
\brief #define _NSSAI_INCLUSION_MODE_H
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _NSSAI_Inclusion_Mode_H
#define _NSSAI_Inclusion_Mode_H
#include "Type1NasIeFormatTv.hpp"
#include <stdint.h> #include <stdint.h>
constexpr uint8_t kNssaiInclusionModeLength = 1;
constexpr auto kNssaiInclusionModeIeName = "NSSAI Inclusion Mode";
namespace nas { namespace nas {
class NSSAI_Inclusion_Mode { class NssaiInclusionMode : public Type1NasIeFormatTv {
public: public:
NSSAI_Inclusion_Mode(); NssaiInclusionMode();
NSSAI_Inclusion_Mode(const uint8_t iei, uint8_t value); NssaiInclusionMode(uint8_t value);
~NSSAI_Inclusion_Mode(); ~NssaiInclusionMode();
int Encode(uint8_t* buf, int len);
int Decode(uint8_t* buf, int len, bool is_option); // int Encode(uint8_t* buf, int len);
void setValue(const uint8_t value); // int Decode(uint8_t* buf, int len, bool is_iei);
uint8_t getValue();
void setValue(uint8_t value);
uint8_t getValue() const;
private: private:
uint8_t _iei;
uint8_t _value;
}; };
} // namespace nas } // namespace nas
......
...@@ -238,8 +238,7 @@ void RegistrationAccept::setEAP_Message(bstring eap) { ...@@ -238,8 +238,7 @@ void RegistrationAccept::setEAP_Message(bstring eap) {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void RegistrationAccept::setNSSAI_Inclusion_Mode(uint8_t value) { void RegistrationAccept::setNSSAI_Inclusion_Mode(uint8_t value) {
ie_nssai_inclusion_mode = ie_nssai_inclusion_mode = std::make_optional<NssaiInclusionMode>(value);
std::make_optional<NSSAI_Inclusion_Mode>(0x0A, value);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
...@@ -675,11 +674,11 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -675,11 +674,11 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
} break; } break;
case 0xA: { case 0xA: {
Logger::nas_mm().debug("Decoding IEI (0xA)"); Logger::nas_mm().debug("Decoding IEI (0xA)");
NSSAI_Inclusion_Mode ie_nssai_inclusion_mode_tmp = {}; NssaiInclusionMode ie_nssai_inclusion_mode_tmp = {};
decoded_size += ie_nssai_inclusion_mode_tmp.Decode( decoded_size += ie_nssai_inclusion_mode_tmp.Decode(
buf + decoded_size, len - decoded_size, true); buf + decoded_size, len - decoded_size, true);
ie_nssai_inclusion_mode = ie_nssai_inclusion_mode =
std::optional<NSSAI_Inclusion_Mode>(ie_nssai_inclusion_mode_tmp); std::optional<NssaiInclusionMode>(ie_nssai_inclusion_mode_tmp);
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet); Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break; } break;
......
...@@ -174,9 +174,9 @@ class RegistrationAccept : public NasMmPlainHeader { ...@@ -174,9 +174,9 @@ class RegistrationAccept : public NasMmPlainHeader {
// TODO: Emergency number list // TODO: Emergency number list
// TODO: Extended emergency number list // TODO: Extended emergency number list
std::optional<SOR_Transparent_Container> std::optional<SOR_Transparent_Container>
ie_sor_transparent_container; // Optional ie_sor_transparent_container; // Optional
std::optional<EapMessage> ie_eap_message; // Optional std::optional<EapMessage> ie_eap_message; // Optional
std::optional<NSSAI_Inclusion_Mode> ie_nssai_inclusion_mode; // Optional std::optional<NssaiInclusionMode> ie_nssai_inclusion_mode; // Optional
// TODO: Operator-defined access category definitions // TODO: Operator-defined access category definitions
std::optional<_5GS_DRX_Parameters> ie_negotiated_drx_parameters; // Optional std::optional<_5GS_DRX_Parameters> ie_negotiated_drx_parameters; // Optional
std::optional<Non_3GPP_NW_Provided_Policies> std::optional<Non_3GPP_NW_Provided_Policies>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment