Commit 017ed78b authored by Tien Thinh NGUYEN's avatar Tien Thinh NGUYEN

Update MA PDU Session Information

parent 74a81963
......@@ -52,7 +52,6 @@ constexpr uint8_t kIeiExtendedProtocolConfigurationOptions =
0x7b; // To be verified
constexpr uint8_t kIeiIntegrityProtectionMaximumDataRate = 0x13;
constexpr uint8_t kIeiIpHeaderCompressionConfiguration = 0x66;
constexpr uint8_t kIeiMaPduSessionInformation = 0xa0;
constexpr uint8_t kIeiMappedEpsBearerContexts = 0x75;
constexpr uint8_t kIeiMaximumNumberOfSupportedPacketFilters = 0x55;
constexpr uint8_t kIeiNbN1ModeDrxParameters = 0x29;
......@@ -90,6 +89,7 @@ constexpr uint8_t kIeiRequestType = 0x08; // 8-(4 higher bits)
constexpr uint8_t kIeiNetworkSlicingIndication = 0x09; // 9-(4 higher bits)
constexpr uint8_t kIeiNssaiInclusionMode = 0x0A; // A-(4 higher bits)
constexpr uint8_t kIeiMaPduSessionInformation = 0x0A; // A-(4 higher bits)
constexpr uint8_t kIeiMicoIndication = 0x0B; // B-(4 higher bits)
constexpr uint8_t kIeiNasKeySetIdentifier = 0x0C; // C-(4 higher bits)
constexpr uint8_t kIeiNon3gppNwProvidedPolicies = 0x0D; // D-(4 higher bits)
......
......@@ -45,7 +45,7 @@
#include "GprsTimer3.hpp"
#include "ImeisvRequest.hpp"
#include "LADN_Indication.hpp"
#include "MA_PDU_Session_Information.hpp"
#include "MaPduSessionInformation.hpp"
#include "NasMessageContainer.hpp"
#include "NasSecurityAlgorithms.hpp"
#include "NSSAI.hpp"
......
......@@ -21,7 +21,6 @@
#include "ImeisvRequest.hpp"
#include "logger.hpp"
using namespace nas;
//------------------------------------------------------------------------------
......
......@@ -19,84 +19,32 @@
* contact@openairinterface.org
*/
/*! \file
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#include "MA_PDU_Session_Information.hpp"
#include "MaPduSessionInformation.hpp"
#include "logger.hpp"
using namespace nas;
//------------------------------------------------------------------------------
MA_PDU_Session_Information::MA_PDU_Session_Information(uint8_t iei) {
_iei = iei;
_value = 0;
}
//------------------------------------------------------------------------------
MA_PDU_Session_Information::MA_PDU_Session_Information(
const uint8_t iei, uint8_t value) {
_iei = iei;
_value = value;
MaPduSessionInformation::MaPduSessionInformation()
: Type1NasIeFormatTv(kIeiMaPduSessionInformation) {
SetIeName(kMaPduSessionInformationIeName);
}
//------------------------------------------------------------------------------
MA_PDU_Session_Information::MA_PDU_Session_Information() {
_iei = 0;
_value = 0;
MaPduSessionInformation::MaPduSessionInformation(uint8_t value)
: Type1NasIeFormatTv(kIeiMaPduSessionInformation) {
SetValue(value & 0x0f);
SetIeName(kMaPduSessionInformationIeName);
}
//------------------------------------------------------------------------------
MA_PDU_Session_Information::~MA_PDU_Session_Information() {}
//------------------------------------------------------------------------------
void MA_PDU_Session_Information::setValue(uint8_t value) {
_value = value;
}
//------------------------------------------------------------------------------
uint8_t MA_PDU_Session_Information::getValue() {
return _value;
}
MaPduSessionInformation::~MaPduSessionInformation() {}
//------------------------------------------------------------------------------
int MA_PDU_Session_Information::Encode(uint8_t* buf, int len) {
Logger::nas_mm().debug("encoding MA_PDU_Session_Information iei(0x%x)", _iei);
if (len < 1) {
Logger::nas_mm().error("len is less than 1");
return 0;
}
int encoded_size = 0;
if (_iei) {
*(buf + encoded_size) = ((_iei & 0x0f) << 4) | (_value & 0x0f);
encoded_size++;
} else {
*(buf + encoded_size) = _value & 0x0f;
encoded_size++;
}
Logger::nas_mm().debug(
"encoded MA_PDU_Session_Information len(%d)", encoded_size);
return encoded_size;
void MaPduSessionInformation::SetValue(uint8_t value) {
SetValue(value & 0x0f);
}
//------------------------------------------------------------------------------
int MA_PDU_Session_Information::Decode(uint8_t* buf, int len, bool is_option) {
Logger::nas_mm().debug("decoding MA_PDU_Session_Information iei(0x%x)", *buf);
int decoded_size = 0;
uint8_t octet = 0;
if (is_option) {
octet = *buf;
decoded_size++;
}
_value = 0x00;
_value = octet & 0x0f;
Logger::nas_mm().debug(
"decoded MA_PDU_Session_Information _value(0x%x)", _value);
Logger::nas_mm().debug(
"decoded MA_PDU_Session_Information len(%d)", decoded_size);
return decoded_size;
uint8_t MaPduSessionInformation::GetValue() const {
return GetValue() & 0x0f;
}
......@@ -19,34 +19,25 @@
* contact@openairinterface.org
*/
/*! \file
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _MA_PDU_SESSION_INFORMATION_H_
#define _MA_PDU_SESSION_INFORMATION_H_
#ifndef __MA_PDU_Session_Information_H_
#define __MA_PDU_Session_Information_H_
#include "Type1NasIeFormatTv.hpp"
#include <stdint.h>
constexpr auto kMaPduSessionInformationIeName = "MA PDU Session Information";
namespace nas {
class MA_PDU_Session_Information {
class MaPduSessionInformation : public Type1NasIeFormatTv {
public:
MA_PDU_Session_Information();
MA_PDU_Session_Information(uint8_t iei);
MA_PDU_Session_Information(const uint8_t iei, uint8_t value);
~MA_PDU_Session_Information();
int Encode(uint8_t* buf, int len);
int Decode(uint8_t* buf, int len, bool is_option);
void setValue(uint8_t value);
uint8_t getValue();
MaPduSessionInformation();
MaPduSessionInformation(uint8_t value);
~MaPduSessionInformation();
void SetValue(uint8_t value);
uint8_t GetValue() const;
private:
uint8_t _iei;
uint8_t _value;
};
} // namespace nas
......
......@@ -159,7 +159,7 @@ void ULNASTransport::SetAdditionalInformation(const bstring& value) {
//------------------------------------------------------------------------------
void ULNASTransport::SetMaPduSessionInformation(uint8_t value) {
ie_ma_pdu_session_information =
std::make_optional<MA_PDU_Session_Information>(0x0A, value);
std::make_optional<MaPduSessionInformation>(value);
}
//------------------------------------------------------------------------------
......@@ -364,14 +364,13 @@ int ULNASTransport::Decode(NasMmPlainHeader* header, uint8_t* buf, int len) {
} break;
case 0xA: {
Logger::nas_mm().debug("Decoding IEI (0xA)");
MA_PDU_Session_Information ie_ma_pdu_session_information_tmp = {};
MaPduSessionInformation ie_ma_pdu_session_information_tmp = {};
if ((decoded_result = ie_ma_pdu_session_information_tmp.Decode(
buf + decoded_size, len - decoded_size, true)) ==
KEncodeDecodeError)
return decoded_result;
decoded_size += decoded_result;
ie_ma_pdu_session_information =
std::optional<MA_PDU_Session_Information>(
ie_ma_pdu_session_information = std::optional<MaPduSessionInformation>(
ie_ma_pdu_session_information_tmp);
octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet);
......
......@@ -74,7 +74,7 @@ class ULNASTransport : public NasMmPlainHeader {
std::optional<S_NSSAI> ie_s_nssai; // Optional
std::optional<DNN> ie_dnn; // Optional
std::optional<AdditionalInformation> ie_additional_information; // Optional
std::optional<MA_PDU_Session_Information>
std::optional<MaPduSessionInformation>
ie_ma_pdu_session_information; // Optional
std::optional<Release_Assistance_Indication>
ie_release_assistance_indication; // Optional
......
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