Commit 151b7e93 authored by Tien Thinh NGUYEN's avatar Tien Thinh NGUYEN

Update Extended_DRX_Parameters and Non_3GPP_NW_Provided_Policies

parent c57dd5b5
...@@ -89,9 +89,10 @@ constexpr uint8_t kIeiShortNameForNetwork = 0x45; ...@@ -89,9 +89,10 @@ 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 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)
constexpr uint8_t kIeiNon3gppNwProvidedPolicies = 0x0D; // C-(4 higher bits)
constexpr uint8_t kIei5gmmCapability = 0x10; constexpr uint8_t kIei5gmmCapability = 0x10;
constexpr uint8_t kIeiUeUsageSetting = 0x18; constexpr uint8_t kIeiUeUsageSetting = 0x18;
......
...@@ -19,100 +19,103 @@ ...@@ -19,100 +19,103 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#include "Extended_DRX_Parameters.hpp" #include "Extended_DRX_Parameters.hpp"
#include "logger.hpp" #include "logger.hpp"
using namespace nas; using namespace nas;
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Extended_DRX_Parameters::Extended_DRX_Parameters(uint8_t iei) { Extended_DRX_Parameters::Extended_DRX_Parameters()
_iei = iei; : Type4NasIe(kIeiExtendedDrxParameters), paging_time_(), e_drx_value_() {
_paging_time = 0; SetLengthIndicator(1);
_value = 0; SetIeName(kExtendedDrxParametersIeName);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Extended_DRX_Parameters::Extended_DRX_Parameters( Extended_DRX_Parameters::Extended_DRX_Parameters(
const uint8_t iei, uint8_t paging_time, uint8_t value) { uint8_t paging_time, uint8_t value)
_iei = iei; : Type4NasIe(kIeiExtendedDrxParameters) {
_paging_time = paging_time & 0x0F; paging_time_ = paging_time & 0x0F;
_value = value & 0x0F; e_drx_value_ = value & 0x0F;
SetLengthIndicator(1);
SetIeName(kExtendedDrxParametersIeName);
} }
//------------------------------------------------------------------------------
Extended_DRX_Parameters::Extended_DRX_Parameters()
: _iei(), _paging_time(), _value() {}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Extended_DRX_Parameters::~Extended_DRX_Parameters() {} Extended_DRX_Parameters::~Extended_DRX_Parameters() {}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void Extended_DRX_Parameters::setValue(uint8_t value) { void Extended_DRX_Parameters::setValue(uint8_t value) {
_value = value & 0x0F; e_drx_value_ = value & 0x0F;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void Extended_DRX_Parameters::setPaging_time(uint8_t value) { void Extended_DRX_Parameters::setPaging_time(uint8_t value) {
_paging_time = value & 0x0F; paging_time_ = value & 0x0F;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
uint8_t Extended_DRX_Parameters::getValue() { uint8_t Extended_DRX_Parameters::getValue() const {
return _value; return e_drx_value_;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
uint8_t Extended_DRX_Parameters::getPaging_time() { uint8_t Extended_DRX_Parameters::getPaging_time() const {
return _paging_time; return paging_time_;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int Extended_DRX_Parameters::Encode(uint8_t* buf, int len) { int Extended_DRX_Parameters::Encode(uint8_t* buf, int len) {
Logger::nas_mm().debug("encoding Extended_DRX_Parameters iei(0x%x)", _iei); Logger::nas_mm().debug("Encoding %s", GetIeName().c_str());
if (len < 3) { int ie_len = GetIeLength();
Logger::nas_mm().error("len is less than 3");
return 0; if (len < ie_len) {
Logger::nas_mm().error("Len is less than %d", ie_len);
return KEncodeDecodeError;
} }
int encoded_size = 0; int encoded_size = 0;
if (_iei) { // IEI and Length
*(buf + encoded_size) = _iei; int encoded_header_size = Type4NasIe::Encode(buf + encoded_size, len);
encoded_size++; if (encoded_header_size == KEncodeDecodeError) return KEncodeDecodeError;
*(buf + encoded_size) = 1; encoded_size += encoded_header_size;
encoded_size++;
*(buf + encoded_size) = (0x0F & _value) | ((_paging_time & 0x0f) << 4); // Octet 3
encoded_size++; uint8_t octet = (0x0F & e_drx_value_) | ((paging_time_ & 0x0f) << 4);
} else { ENCODE_U8(buf + encoded_size, octet, encoded_size);
// *(buf + encoded_size) = length - 1; encoded_size++;
// *(buf + encoded_size) = _value; encoded_size++; encoded_size++;
}
Logger::nas_mm().debug( Logger::nas_mm().debug(
"encoded Extended_DRX_Parameters len(%d)", encoded_size); "Encoded %s, len (%d)", GetIeName().c_str(), encoded_size);
return encoded_size; return encoded_size;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int Extended_DRX_Parameters::Decode(uint8_t* buf, int len, bool is_option) { int Extended_DRX_Parameters::Decode(uint8_t* buf, int len, bool is_iei) {
Logger::nas_mm().debug("decoding Extended_DRX_Parameters iei(0x%x)", *buf); if (len < kExtendedDrxParametersLength) {
int decoded_size = 0; Logger::nas_mm().error(
if (is_option) { "Buffer length is less than the minimum length of this IE (%d octet)",
decoded_size++; kExtendedDrxParametersLength);
return KEncodeDecodeError;
} }
_value = 0x00;
// length = *(buf + decoded_size); uint8_t decoded_size = 0;
decoded_size++; uint8_t octet = 0;
_value = *(buf + decoded_size) & 0x0f; Logger::nas_mm().debug("Decoding %s", GetIeName().c_str());
_paging_time = *(buf + decoded_size) & 0xf0;
decoded_size++; // IEI and Length
int decoded_header_size = Type4NasIe::Decode(buf + decoded_size, len, is_iei);
if (decoded_header_size == KEncodeDecodeError) return KEncodeDecodeError;
decoded_size += decoded_header_size;
DECODE_U8(buf + decoded_size, octet, decoded_size);
e_drx_value_ = octet & 0x0f;
paging_time_ = (octet & 0xf0) >> 4;
Logger::nas_mm().debug( Logger::nas_mm().debug(
"decoded Extended_DRX_Parameters paging_time(0x%x) value(0x%x) ", "Decoded %s, Paging Time Window 0x%x, eDRX value 0x%x",
_paging_time, _value); GetIeName().c_str(), paging_time_, e_drx_value_);
Logger::nas_mm().debug( Logger::nas_mm().debug(
"decoded Extended_DRX_Parameters len(%d)", decoded_size); "Decoded %s, len (%d)", GetIeName().c_str(), decoded_size);
return decoded_size; return decoded_size;
} }
...@@ -19,38 +19,35 @@ ...@@ -19,38 +19,35 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file #ifndef _EXTENDED_DRX_PARAMETERS_H_
\brief #define _EXTENDED_DRX_PARAMETERS_H_
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef __Extended_DRX_Parameters_H_
#define __Extended_DRX_Parameters_H_
#include "Type4NasIe.hpp"
#include <stdint.h> #include <stdint.h>
constexpr uint8_t kExtendedDrxParametersLength = 3;
constexpr auto kExtendedDrxParametersIeName = "Extended DRX Parameters";
namespace nas { namespace nas {
class Extended_DRX_Parameters { class Extended_DRX_Parameters : public Type4NasIe {
public: public:
Extended_DRX_Parameters(); Extended_DRX_Parameters();
Extended_DRX_Parameters(uint8_t iei); Extended_DRX_Parameters(uint8_t paging_time, uint8_t value);
Extended_DRX_Parameters(
const uint8_t iei, uint8_t paging_time, uint8_t value);
~Extended_DRX_Parameters(); ~Extended_DRX_Parameters();
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);
void setValue(uint8_t value); void setValue(uint8_t value);
uint8_t getValue(); uint8_t getValue() const;
void setPaging_time(uint8_t value); void setPaging_time(uint8_t value);
uint8_t getPaging_time(); uint8_t getPaging_time() const;
private: private:
uint8_t _iei; uint8_t paging_time_;
uint8_t _paging_time; uint8_t e_drx_value_;
uint8_t _value;
}; };
} // namespace nas } // namespace nas
......
...@@ -19,84 +19,33 @@ ...@@ -19,84 +19,33 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#include "Non_3GPP_NW_Provided_Policies.hpp" #include "Non_3GPP_NW_Provided_Policies.hpp"
#include "logger.hpp" #include "logger.hpp"
using namespace nas; using namespace nas;
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Non_3GPP_NW_Provided_Policies::Non_3GPP_NW_Provided_Policies( Non_3GPP_NW_Provided_Policies::Non_3GPP_NW_Provided_Policies(uint8_t value)
const uint8_t iei, uint8_t value) { : Type1NasIeFormatTv(kIeiNon3gppNwProvidedPolicies) {
_iei = iei; SetValue(value & 0x01);
_value = value; SetIeName(kNon3gppNwProvidedPoliciesIeName);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Non_3GPP_NW_Provided_Policies::Non_3GPP_NW_Provided_Policies() {} Non_3GPP_NW_Provided_Policies::Non_3GPP_NW_Provided_Policies()
: Type1NasIeFormatTv(kIeiNon3gppNwProvidedPolicies) {
//------------------------------------------------------------------------------ SetIeName(kNon3gppNwProvidedPoliciesIeName);
Non_3GPP_NW_Provided_Policies::~Non_3GPP_NW_Provided_Policies(){};
//------------------------------------------------------------------------------
void Non_3GPP_NW_Provided_Policies::setValue(const uint8_t value) {
_value = value;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
uint8_t Non_3GPP_NW_Provided_Policies::getValue() { Non_3GPP_NW_Provided_Policies::~Non_3GPP_NW_Provided_Policies(){};
return _value;
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int Non_3GPP_NW_Provided_Policies::Encode(uint8_t* buf, int len) { void Non_3GPP_NW_Provided_Policies::setValue(uint8_t value) {
Logger::nas_mm().debug( SetValue(value & 0x01);
"Encoding Non_3GPP_NW_Provided_Policies IE iei(0x%x)", _iei);
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 Non_3GPP_NW_Provided_Policies IE (len, 1 octet)");
return 1;
}
}
return 1;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
int Non_3GPP_NW_Provided_Policies::Decode( uint8_t Non_3GPP_NW_Provided_Policies::getValue() const {
uint8_t* buf, int len, bool is_option) { return GetValue();
Logger::nas_mm().debug("Decoding Non_3GPP_NW_Provided_Policies IE");
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 Non_3GPP_NW_Provided_Policies iei (0x%x) value (0x%x)", _iei,
_value);
return 1;
}
} }
...@@ -19,33 +19,31 @@ ...@@ -19,33 +19,31 @@
* contact@openairinterface.org * contact@openairinterface.org
*/ */
/*! \file #ifndef _NON_3GPP_NW_PROVIDED_POLICIES_H
\brief #define _NON_3GPP_NW_PROVIDED_POLICIES_H
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _Non_3GPP_NW_Provided_Policies_H
#define _Non_3GPP_NW_Provided_Policies_H
#include "Type1NasIeFormatTv.hpp"
#include <stdint.h> #include <stdint.h>
constexpr uint8_t kNon3gppNwProvidedPoliciesLength = 1;
constexpr auto kNon3gppNwProvidedPoliciesIeName =
"Non-3GPP NW Provided Policies";
namespace nas { namespace nas {
class Non_3GPP_NW_Provided_Policies { class Non_3GPP_NW_Provided_Policies : public Type1NasIeFormatTv {
public: public:
Non_3GPP_NW_Provided_Policies(); Non_3GPP_NW_Provided_Policies();
Non_3GPP_NW_Provided_Policies(const uint8_t iei, uint8_t value); Non_3GPP_NW_Provided_Policies(uint8_t value);
~Non_3GPP_NW_Provided_Policies(); ~Non_3GPP_NW_Provided_Policies();
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
......
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