ss: move timing_info_t to ttcn3_helpers, fix PDCP count handling

This commit is contained in:
Andre Puschmann 2020-02-29 14:33:36 +01:00
parent 72c5b381e4
commit 5a03eaed2b
4 changed files with 65 additions and 50 deletions

View File

@ -29,7 +29,6 @@
#include "rapidjson/document.h" // rapidjson's DOM-style API
#include "rapidjson/prettywriter.h" // for stringify JSON
#include "ttcn3_interfaces.h"
#include <algorithm>
#include <assert.h>
#include <bitset>
@ -43,12 +42,18 @@ using namespace rapidjson;
class ttcn3_helpers
{
public:
typedef struct {
bool now; ///< If set to false, the TTI field contains a valid TTI
uint32_t tti;
} timing_info_t;
typedef struct {
bool rb_is_srb;
uint8_t rb_id;
uint32_t ul_value;
uint32_t dl_value;
uint16_t ul_value;
uint16_t dl_value;
} pdcp_count_t;
typedef std::vector<ttcn3_helpers::pdcp_count_t> pdcp_count_map_t;
static std::string get_ctrl_cnf(const std::string protocol_, const std::string version_, const std::string addr_)
{
@ -66,7 +71,6 @@ public:
conn_id.AddMember("Protocol", protocol, resp.GetAllocator());
// Version
Value ipAddr(kObjectType);
Value version(version_.c_str(), resp.GetAllocator());
Value addr(addr_.c_str(), resp.GetAllocator());

View File

@ -24,11 +24,7 @@
#include "srslte/common/common.h"
#include "srslte/interfaces/ue_interfaces.h"
typedef struct {
bool now; ///< If set to false, the TTI field contains a valid TTI
uint32_t tti;
} timing_info_t;
#include "ttcn3_helpers.h"
// Interfaces used by system interface to communicate with main component
class ss_ut_interface
@ -48,32 +44,37 @@ class ss_sys_interface
public:
virtual void add_bcch_dlsch_pdu(const std::string cell_name, srslte::unique_byte_buffer_t pdu) = 0;
virtual void add_pch_pdu(srslte::unique_byte_buffer_t pdu) = 0;
virtual void set_cell_attenuation(const ttcn3_helpers::timing_info_t timing,
const std::string cell_name,
const float attenuation) = 0;
virtual void set_cell_config(const ttcn3_helpers::timing_info_t timing,
const std::string cell_name,
const uint32_t earfcn,
const srslte_cell_t cell,
const float power) = 0;
virtual void
set_cell_attenuation(const timing_info_t timing, const std::string cell_name, const float attenuation) = 0;
virtual void set_cell_config(const timing_info_t timing,
const std::string cell_name,
const uint32_t earfcn,
const srslte_cell_t cell,
const float power) = 0;
virtual void add_srb(const timing_info_t timing, const uint32_t lcid, const srslte::pdcp_config_t pdcp_config) = 0;
virtual void del_srb(const timing_info_t timing, const uint32_t lcid) = 0;
add_srb(const ttcn3_helpers::timing_info_t timing, const uint32_t lcid, const srslte::pdcp_config_t pdcp_config) = 0;
virtual void del_srb(const ttcn3_helpers::timing_info_t timing, const uint32_t lcid) = 0;
virtual uint32_t get_tti() = 0;
virtual void set_as_security(const timing_info_t timing,
const uint32_t lcid,
const std::array<uint8_t, 32> k_rrc_enc,
const std::array<uint8_t, 32> k_rrc_int,
const std::array<uint8_t, 32> k_up_enc,
const srslte::CIPHERING_ALGORITHM_ID_ENUM cipher_algo,
const srslte::INTEGRITY_ALGORITHM_ID_ENUM integ_algo) = 0;
virtual void release_as_security(const timing_info_t timing) = 0;
virtual void set_as_security(const ttcn3_helpers::timing_info_t timing,
const uint32_t lcid,
const std::array<uint8_t, 32> k_rrc_enc,
const std::array<uint8_t, 32> k_rrc_int,
const std::array<uint8_t, 32> k_up_enc,
const srslte::CIPHERING_ALGORITHM_ID_ENUM cipher_algo,
const srslte::INTEGRITY_ALGORITHM_ID_ENUM integ_algo) = 0;
virtual void release_as_security(const ttcn3_helpers::timing_info_t timing) = 0;
virtual ttcn3_helpers::pdcp_count_map_t get_pdcp_count() = 0;
};
class ss_srb_interface
{
public:
virtual void add_ccch_pdu(const timing_info_t timing, srslte::unique_byte_buffer_t pdu) = 0;
virtual void
add_dcch_pdu(const timing_info_t timing, uint32_t lcid, srslte::unique_byte_buffer_t pdu, bool follow_on_flag) = 0;
virtual void add_ccch_pdu(const ttcn3_helpers::timing_info_t timing, srslte::unique_byte_buffer_t pdu) = 0;
virtual void add_dcch_pdu(const ttcn3_helpers::timing_info_t timing,
uint32_t lcid,
srslte::unique_byte_buffer_t pdu,
bool follow_on_flag) = 0;
virtual void reestablish_bearer(uint32_t lcid) = 0;
};

View File

@ -387,16 +387,7 @@ private:
const Value& get = pdcp_count["Get"];
assert(get.HasMember("AllRBs"));
// prepare response to SS
std::vector<ttcn3_helpers::pdcp_count_t> bearers;
ttcn3_helpers::pdcp_count_t srb1;
srb1.rb_is_srb = true;
srb1.rb_id = 1;
srb1.dl_value = 0;
srb1.ul_value = 1;
bearers.push_back(srb1);
std::string resp = ttcn3_helpers::get_pdcp_count_response(cell_id.GetString(), bearers);
std::string resp = ttcn3_helpers::get_pdcp_count_response(cell_id.GetString(), syssim->get_pdcp_count());
log->info("Sending %s to tester (%zd B)\n", resp.c_str(), resp.length());
send((const uint8_t*)resp.c_str(), resp.length());

View File

@ -705,11 +705,11 @@ public:
void process_pdu(uint8_t* buff, uint32_t len, pdu_queue::channel_t channel) {}
void set_cell_config(const timing_info_t timing,
const std::string cell_name,
const uint32_t earfcn,
const srslte_cell_t cell,
const float power)
void set_cell_config(const ttcn3_helpers::timing_info_t timing,
const std::string cell_name,
const uint32_t earfcn,
const srslte_cell_t cell,
const float power)
{
if (timing.now) {
set_cell_config_impl(cell_name, earfcn, cell, power);
@ -754,7 +754,7 @@ public:
return false;
}
void set_cell_attenuation(const timing_info_t timing, const std::string cell_name, const float value)
void set_cell_attenuation(const ttcn3_helpers::timing_info_t timing, const std::string cell_name, const float value)
{
if (timing.now) {
set_cell_attenuation_impl(cell_name, value);
@ -818,7 +818,7 @@ public:
}
}
void add_ccch_pdu(const timing_info_t timing, unique_byte_buffer_t pdu)
void add_ccch_pdu(const ttcn3_helpers::timing_info_t timing, unique_byte_buffer_t pdu)
{
if (timing.now) {
// Add to SRB0 Tx queue
@ -830,7 +830,8 @@ public:
}
}
void add_dcch_pdu(const timing_info_t timing, uint32_t lcid, unique_byte_buffer_t pdu, bool follow_on_flag)
void
add_dcch_pdu(const ttcn3_helpers::timing_info_t timing, uint32_t lcid, unique_byte_buffer_t pdu, bool follow_on_flag)
{
if (timing.now) {
add_dcch_pdu_impl(lcid, std::move(pdu), follow_on_flag);
@ -865,7 +866,7 @@ public:
void step_timer() { timers.step_all(); }
void add_srb(const timing_info_t timing, const uint32_t lcid, const pdcp_config_t pdcp_config)
void add_srb(const ttcn3_helpers::timing_info_t timing, const uint32_t lcid, const pdcp_config_t pdcp_config)
{
if (timing.now) {
add_srb_impl(lcid, pdcp_config);
@ -897,7 +898,7 @@ public:
rlc.reestablish(lcid);
}
void del_srb(const timing_info_t timing, const uint32_t lcid)
void del_srb(const ttcn3_helpers::timing_info_t timing, const uint32_t lcid)
{
if (timing.now) {
del_srb_impl(lcid);
@ -993,7 +994,7 @@ public:
bool rb_is_um(uint32_t lcid) { return false; }
void set_as_security(const timing_info_t timing,
void set_as_security(const ttcn3_helpers::timing_info_t timing,
const uint32_t lcid,
std::array<uint8_t, 32> k_rrc_enc_,
std::array<uint8_t, 32> k_rrc_int_,
@ -1040,7 +1041,7 @@ public:
integ_algo = integ_algo_;
}
void release_as_security(const timing_info_t timing)
void release_as_security(const ttcn3_helpers::timing_info_t timing)
{
if (timing.now) {
release_as_security_impl();
@ -1068,6 +1069,24 @@ public:
}
}
ttcn3_helpers::pdcp_count_map_t get_pdcp_count()
{
// prepare response to SS
std::vector<ttcn3_helpers::pdcp_count_t> bearers;
for (uint32_t i = 0; i < rb_id_vec.size(); i++) {
if (pdcp.is_lcid_enabled(i)) {
ttcn3_helpers::pdcp_count_t bearer;
uint16_t tmp; // not handling HFN
pdcp.get_bearer_status(i, &bearer.dl_value, &tmp, &bearer.ul_value, &tmp);
bearer.rb_is_srb = i <= 2;
bearer.rb_id = i;
log.info("PDCP count lcid=%d, dl=%d, ul=%d\n", bearer.rb_id, bearer.dl_value, bearer.ul_value);
bearers.push_back(bearer);
}
}
return bearers;
}
private:
// SYS interface
ttcn3_ut_interface ut;