ss: move timing_info_t to ttcn3_helpers, fix PDCP count handling

master
Andre Puschmann 5 years ago
parent 72c5b381e4
commit 5a03eaed2b

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

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

@ -387,16 +387,7 @@ private:
const Value& get = pdcp_count["Get"]; const Value& get = pdcp_count["Get"];
assert(get.HasMember("AllRBs")); assert(get.HasMember("AllRBs"));
// prepare response to SS std::string resp = ttcn3_helpers::get_pdcp_count_response(cell_id.GetString(), syssim->get_pdcp_count());
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);
log->info("Sending %s to tester (%zd B)\n", resp.c_str(), resp.length()); log->info("Sending %s to tester (%zd B)\n", resp.c_str(), resp.length());
send((const uint8_t*)resp.c_str(), resp.length()); send((const uint8_t*)resp.c_str(), resp.length());

@ -705,11 +705,11 @@ public:
void process_pdu(uint8_t* buff, uint32_t len, pdu_queue::channel_t channel) {} void process_pdu(uint8_t* buff, uint32_t len, pdu_queue::channel_t channel) {}
void set_cell_config(const timing_info_t timing, void set_cell_config(const ttcn3_helpers::timing_info_t timing,
const std::string cell_name, const std::string cell_name,
const uint32_t earfcn, const uint32_t earfcn,
const srslte_cell_t cell, const srslte_cell_t cell,
const float power) const float power)
{ {
if (timing.now) { if (timing.now) {
set_cell_config_impl(cell_name, earfcn, cell, power); set_cell_config_impl(cell_name, earfcn, cell, power);
@ -754,7 +754,7 @@ public:
return false; 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) { if (timing.now) {
set_cell_attenuation_impl(cell_name, value); 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) { if (timing.now) {
// Add to SRB0 Tx queue // 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) { if (timing.now) {
add_dcch_pdu_impl(lcid, std::move(pdu), follow_on_flag); add_dcch_pdu_impl(lcid, std::move(pdu), follow_on_flag);
@ -865,7 +866,7 @@ public:
void step_timer() { timers.step_all(); } 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) { if (timing.now) {
add_srb_impl(lcid, pdcp_config); add_srb_impl(lcid, pdcp_config);
@ -897,7 +898,7 @@ public:
rlc.reestablish(lcid); 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) { if (timing.now) {
del_srb_impl(lcid); del_srb_impl(lcid);
@ -993,7 +994,7 @@ public:
bool rb_is_um(uint32_t lcid) { return false; } 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, const uint32_t lcid,
std::array<uint8_t, 32> k_rrc_enc_, std::array<uint8_t, 32> k_rrc_enc_,
std::array<uint8_t, 32> k_rrc_int_, std::array<uint8_t, 32> k_rrc_int_,
@ -1040,7 +1041,7 @@ public:
integ_algo = integ_algo_; 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) { if (timing.now) {
release_as_security_impl(); 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: private:
// SYS interface // SYS interface
ttcn3_ut_interface ut; ttcn3_ut_interface ut;

Loading…
Cancel
Save