Commit 2d7a889a authored by Tien Thinh NGUYEN's avatar Tien Thinh NGUYEN

Update EPS Bearer Context Status

parent 3ed782cd
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
#include "Authentication_Response_Parameter.hpp" #include "Authentication_Response_Parameter.hpp"
#include "DNN.hpp" #include "DNN.hpp"
#include "EAP_Message.hpp" #include "EAP_Message.hpp"
#include "EPS_Bearer_Context_Status.hpp" #include "EpsBearerContextStatus.hpp"
#include "EPS_NAS_Message_Container.hpp" #include "EPS_NAS_Message_Container.hpp"
#include "EPS_NAS_Security_Algorithms.hpp" #include "EPS_NAS_Security_Algorithms.hpp"
#include "Extended_DRX_Parameters.hpp" #include "Extended_DRX_Parameters.hpp"
......
...@@ -87,7 +87,7 @@ int _5GMMCapability::Encode(uint8_t* buf, int len) { ...@@ -87,7 +87,7 @@ int _5GMMCapability::Encode(uint8_t* buf, int len) {
} }
Logger::nas_mm().debug( Logger::nas_mm().debug(
"Decoded %s, len (%d)", GetIeName().c_str(), encoded_size); "Encoded %s, len (%d)", GetIeName().c_str(), encoded_size);
return encoded_size; return encoded_size;
} }
......
...@@ -19,85 +19,90 @@ ...@@ -19,85 +19,90 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
#include "EPS_Bearer_Context_Status.hpp" #include "EpsBearerContextStatus.hpp"
#include "3gpp_24.501.hpp" #include "3gpp_24.501.hpp"
#include "common_defs.h" #include "common_defs.h"
#include "Ie_Const.hpp"
#include "logger.hpp" #include "logger.hpp"
using namespace nas; using namespace nas;
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
EPS_Bearer_Context_Status::EPS_Bearer_Context_Status(uint8_t iei) { EpsBearerContextStatus::EpsBearerContextStatus()
_iei = iei; : Type4NasIe(kIeiEpsBearerContextStatus) {
length = 0; value_ = 0;
_value = 0; SetLengthIndicator(2);
SetIeName(kEpsBearerContextStatusIeName);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
EPS_Bearer_Context_Status::EPS_Bearer_Context_Status( EpsBearerContextStatus::EpsBearerContextStatus(uint16_t value) {
const uint8_t iei, uint16_t value) { value_ = value;
_iei = iei; SetLengthIndicator(2);
_value = value; SetIeName(kEpsBearerContextStatusIeName);
length = kEpsBearerContextStatusLength;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
EPS_Bearer_Context_Status::EPS_Bearer_Context_Status() EpsBearerContextStatus::~EpsBearerContextStatus() {}
: _iei(), length(), _value() {}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
EPS_Bearer_Context_Status::~EPS_Bearer_Context_Status() {} void EpsBearerContextStatus::SetValue(uint16_t value) {
value_ = value;
//------------------------------------------------------------------------------
void EPS_Bearer_Context_Status::setValue(uint8_t iei, uint16_t value) {
_iei = iei;
_value = value;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
uint16_t EPS_Bearer_Context_Status::getValue() { uint16_t EpsBearerContextStatus::GetValue() const {
return _value; return value_;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int EPS_Bearer_Context_Status::Encode(uint8_t* buf, int len) { int EpsBearerContextStatus::Encode(uint8_t* buf, int len) {
Logger::nas_mm().debug("Encoding EPS_Bearer_Context_Status"); Logger::nas_mm().debug("Encoding %s", GetIeName().c_str());
if (len < kEpsBearerContextStatusLength) { int ie_len = GetIeLength();
Logger::nas_mm().error(
"Buffer length is less than the minimum length of this IE (%d octet)", if (len < ie_len) {
kEpsBearerContextStatusLength); Logger::nas_mm().error("Len is less than %d", ie_len);
return KEncodeDecodeError; return KEncodeDecodeError;
} }
int encoded_size = 0; int encoded_size = 0;
if (_iei) { // IEI and Length
ENCODE_U8(buf + encoded_size, _iei, encoded_size); int encoded_header_size = Type4NasIe::Encode(buf + encoded_size, len);
} if (encoded_header_size == KEncodeDecodeError) return KEncodeDecodeError;
// Length encoded_size += encoded_header_size;
ENCODE_U8(buf + encoded_size, length, encoded_size);
// Value // Value
ENCODE_U16(buf + encoded_size, _value, encoded_size); ENCODE_U16(buf + encoded_size, value_, encoded_size);
Logger::nas_mm().debug( Logger::nas_mm().debug(
"encoded EPS_Bearer_Context_Status (len %d)", encoded_size); "Encoded %s, len (%d)", GetIeName().c_str(), encoded_size);
return encoded_size; return encoded_size;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int EPS_Bearer_Context_Status::Decode(uint8_t* buf, int len, bool is_option) { int EpsBearerContextStatus::Decode(uint8_t* buf, int len, bool is_iei) {
Logger::nas_mm().debug("Decoding EPS_Bearer_Context_Status"); if (len < kEpsBearerContextStatusLength) {
int decoded_size = 0; Logger::nas_mm().error(
if (is_option) { "Buffer length is less than the minimum length of this IE (%d octet)",
DECODE_U8(buf + decoded_size, _iei, decoded_size); // for IE kEpsBearerContextStatusLength);
return KEncodeDecodeError;
} }
// Length
DECODE_U8(buf + decoded_size, length, decoded_size); // for IE uint8_t decoded_size = 0;
uint8_t octet = 0;
Logger::nas_mm().debug("Decoding %s", GetIeName().c_str());
// IEI and Length
int decoded_header_size = Type4NasIe::Decode(buf + decoded_size, len, is_iei);
// decoded_size += Type4NasIe::Decode(buf + decoded_size, len, is_iei);
if (decoded_header_size == KEncodeDecodeError) return KEncodeDecodeError;
decoded_size += decoded_header_size;
// Value // Value
DECODE_U16(buf + decoded_size, _value, decoded_size); // for IE DECODE_U16(buf + decoded_size, value_, decoded_size); // for IE
Logger::nas_mm().debug("EPS_Bearer_Context_Status, value 0x%0x", value_);
Logger::nas_mm().debug( Logger::nas_mm().debug(
"decoded EPS_Bearer_Context_Status, value 0x%4x", _value); "Decoded %s, len (%d)", GetIeName().c_str(), decoded_size);
Logger::nas_mm().debug(
"decoded EPS_Bearer_Context_Status (len %d)", decoded_size);
return decoded_size; return decoded_size;
} }
...@@ -19,30 +19,31 @@ ...@@ -19,30 +19,31 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
#ifndef _EPS_Bearer_Context_Status_H_ #ifndef _EPS_BEARER_CONTEXT_STATUS_H_
#define _EPS_Bearer_Context_Status_H_ #define _EPS_BEARER_CONTEXT_STATUS_H_
#include "Type4NasIe.hpp"
#include <stdint.h> #include <stdint.h>
constexpr uint8_t kEpsBearerContextStatusLength = 4; constexpr uint8_t kEpsBearerContextStatusLength = 4;
constexpr auto kEpsBearerContextStatusIeName = "EPS Bearer Context Status";
namespace nas { namespace nas {
class EPS_Bearer_Context_Status { class EpsBearerContextStatus : public Type4NasIe {
public: public:
EPS_Bearer_Context_Status(); EpsBearerContextStatus();
EPS_Bearer_Context_Status(uint8_t iei); EpsBearerContextStatus(uint16_t value);
EPS_Bearer_Context_Status(const uint8_t iei, uint16_t value); ~EpsBearerContextStatus();
~EPS_Bearer_Context_Status();
void setValue(uint8_t iei, uint16_t value); void SetValue(uint16_t value);
uint16_t GetValue() const;
int Encode(uint8_t* buf, int len); int Encode(uint8_t* buf, int len);
int Decode(uint8_t* buf, int len, bool is_option); int Decode(uint8_t* buf, int len, bool is_iei);
uint16_t getValue();
private: private:
uint8_t _iei; uint16_t value_;
uint8_t length;
uint16_t _value;
}; };
} // namespace nas } // namespace nas
......
...@@ -242,7 +242,7 @@ void RegistrationAccept::setNon_3GPP_NW_Provided_Policies(uint8_t value) { ...@@ -242,7 +242,7 @@ void RegistrationAccept::setNon_3GPP_NW_Provided_Policies(uint8_t value) {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void RegistrationAccept::setEPS_Bearer_Context_Status(uint16_t value) { void RegistrationAccept::setEPS_Bearer_Context_Status(uint16_t value) {
ie_eps_bearer_context_status = new EPS_Bearer_Context_Status(0x60, value); ie_eps_bearer_context_status = new EpsBearerContextStatus(value);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
...@@ -787,7 +787,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) { ...@@ -787,7 +787,7 @@ int RegistrationAccept::Decode(uint8_t* buf, int len) {
} break; } break;
case 0x60: { case 0x60: {
Logger::nas_mm().debug("Decoding IEI (0x60)"); Logger::nas_mm().debug("Decoding IEI (0x60)");
ie_eps_bearer_context_status = new EPS_Bearer_Context_Status(); ie_eps_bearer_context_status = new EpsBearerContextStatus();
decoded_size += ie_eps_bearer_context_status->Decode( decoded_size += ie_eps_bearer_context_status->Decode(
buf + decoded_size, len - decoded_size, true); buf + decoded_size, len - decoded_size, true);
octet = *(buf + decoded_size); octet = *(buf + decoded_size);
......
...@@ -177,7 +177,7 @@ class RegistrationAccept : public NasMmPlainHeader { ...@@ -177,7 +177,7 @@ class RegistrationAccept : public NasMmPlainHeader {
// TODO: Operator-defined access category definitions // TODO: Operator-defined access category definitions
_5GS_DRX_Parameters* ie_negotiated_drx_parameters; // Optional _5GS_DRX_Parameters* ie_negotiated_drx_parameters; // Optional
Non_3GPP_NW_Provided_Policies* ie_non_3gpp_nw_policies; // Optional Non_3GPP_NW_Provided_Policies* ie_non_3gpp_nw_policies; // Optional
EPS_Bearer_Context_Status* ie_eps_bearer_context_status; // Optional EpsBearerContextStatus* ie_eps_bearer_context_status; // Optional
Extended_DRX_Parameters* ie_extended_drx_parameters; // Optional Extended_DRX_Parameters* ie_extended_drx_parameters; // Optional
GPRS_Timer_3* ie_T3447_value; // Optional GPRS_Timer_3* ie_T3447_value; // Optional
GPRS_Timer_3* ie_T3448_value; // Optional GPRS_Timer_3* ie_T3448_value; // Optional
......
...@@ -513,14 +513,14 @@ bool RegistrationRequest::getNasMessageContainer(bstring& nas) { ...@@ -513,14 +513,14 @@ bool RegistrationRequest::getNasMessageContainer(bstring& nas) {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void RegistrationRequest::setEPS_Bearer_Context_Status(uint16_t value) { void RegistrationRequest::setEPS_Bearer_Context_Status(uint16_t value) {
ie_eps_bearer_context_status = std::make_optional<EPS_Bearer_Context_Status>( ie_eps_bearer_context_status =
kIeiEpsBearerContextStatus, value); std::make_optional<EpsBearerContextStatus>(value);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool RegistrationRequest::getEpsBearerContextStatus(uint16_t& value) { bool RegistrationRequest::getEpsBearerContextStatus(uint16_t& value) {
if (ie_eps_bearer_context_status.has_value()) { if (ie_eps_bearer_context_status.has_value()) {
value = ie_eps_bearer_context_status.value().getValue(); value = ie_eps_bearer_context_status.value().GetValue();
return true; return true;
} else { } else {
return false; return false;
...@@ -1076,10 +1076,10 @@ int RegistrationRequest::Decode(uint8_t* buf, int len) { ...@@ -1076,10 +1076,10 @@ int RegistrationRequest::Decode(uint8_t* buf, int len) {
} break; } break;
case 0x60: { case 0x60: {
Logger::nas_mm().debug("Decoding IEI(0x71)"); Logger::nas_mm().debug("Decoding IEI(0x71)");
EPS_Bearer_Context_Status ie_eps_bearer_context_status_tmp = {}; EpsBearerContextStatus ie_eps_bearer_context_status_tmp = {};
decoded_size += ie_eps_bearer_context_status_tmp.Decode( decoded_size += ie_eps_bearer_context_status_tmp.Decode(
buf + decoded_size, len - decoded_size, true); buf + decoded_size, len - decoded_size, true);
ie_eps_bearer_context_status = std::optional<EPS_Bearer_Context_Status>( ie_eps_bearer_context_status = std::optional<EpsBearerContextStatus>(
ie_eps_bearer_context_status_tmp); ie_eps_bearer_context_status_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);
......
...@@ -177,10 +177,15 @@ class RegistrationRequest : public NasMmPlainHeader { ...@@ -177,10 +177,15 @@ class RegistrationRequest : public NasMmPlainHeader {
// TODO: Mobile station classmark 2 // TODO: Mobile station classmark 2
// TODO: Supported codecs // TODO: Supported codecs
std::optional<NasMessageContainer> ie_nas_message_container; // Optional std::optional<NasMessageContainer> ie_nas_message_container; // Optional
std::optional<EPS_Bearer_Context_Status> std::optional<EpsBearerContextStatus>
ie_eps_bearer_context_status; // Optional ie_eps_bearer_context_status; // Optional
// TODO: Requested extended DRX parameters // TODO: Requested extended DRX parameters
// TODO: T3324 value // TODO: T3324 value
// TODO: UE radio capability ID (Rel 16.4.1)
// TODO: Requested mapped NSSAI (Rel 16.4.1)
// TODO: Additional information requested (Rel 16.4.1)
// TODO: Requested WUS assistance information (Rel 16.4.1)
// TODO: N5GC indication (Rel 16.4.1)
}; };
} // namespace nas } // namespace nas
......
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