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

Update EPS Bearer Context Status

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