add handling of FollowOnFlag from tester

This commit is contained in:
Andre Puschmann 2020-02-10 21:55:29 +01:00
parent 51864bc03c
commit e919c57a32
4 changed files with 31 additions and 11 deletions

View File

@ -382,6 +382,21 @@ public:
}
return timing;
}
static bool get_follow_on_flag(Document& document)
{
const Value& a = document["Common"];
// check cnf flag
assert(a.HasMember("ControlInfo"));
const Value& b = a["ControlInfo"];
assert(b.HasMember("FollowOnFlag"));
const Value& config_flag = b["FollowOnFlag"];
assert(config_flag.IsBool());
return config_flag.GetBool();
}
};
#endif // SRSUE_TTCN3_HELPERS_H

View File

@ -71,9 +71,10 @@ public:
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) = 0;
virtual void reestablish_bearer(uint32_t lcid) = 0;
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 reestablish_bearer(uint32_t lcid) = 0;
};
class syssim_interface_phy

View File

@ -101,7 +101,7 @@ private:
} else if (rrcpdu.HasMember("Dcch")) {
rx_buf_offset += 2;
uint32_t lcid = document["Common"]["RoutingInfo"]["RadioBearerId"]["Srb"].GetInt();
handle_dcch_pdu(document, lcid, &rx_buf->at(rx_buf_offset), n - rx_buf_offset);
handle_dcch_pdu(document, lcid, &rx_buf->at(rx_buf_offset), n - rx_buf_offset, ttcn3_helpers::get_follow_on_flag(document));
} else {
log->error("Received unknown request.\n");
}
@ -128,7 +128,8 @@ private:
}
// Todo: move to SYSSIM
void handle_dcch_pdu(Document& document, const uint16_t lcid, const uint8_t* payload, const uint16_t len)
void
handle_dcch_pdu(Document& document, const uint16_t lcid, const uint8_t* payload, const uint16_t len, bool follow_on)
{
log->info_hex(payload, len, "Received DCCH RRC PDU (lcid=%d)\n", lcid);
@ -137,7 +138,7 @@ private:
pdu->N_bytes = len;
memcpy(pdu->msg, payload, pdu->N_bytes);
syssim->add_dcch_pdu(ttcn3_helpers::get_timing_info(document), lcid, std::move(pdu));
syssim->add_dcch_pdu(ttcn3_helpers::get_timing_info(document), lcid, std::move(pdu), follow_on);
}
bool ccch_is_rrc_reestablishment(Document& document)

View File

@ -824,22 +824,23 @@ public:
}
}
void add_dcch_pdu(const timing_info_t timing, uint32_t lcid, unique_byte_buffer_t pdu)
void add_dcch_pdu(const 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));
add_dcch_pdu_impl(lcid, std::move(pdu), follow_on_flag);
} else {
log.debug("Scheduling DCCH PDU for TTI=%d\n", timing.tti);
auto task = [this](uint32_t lcid, srslte::unique_byte_buffer_t& pdu) { add_dcch_pdu_impl(lcid, std::move(pdu)); };
tti_actions[timing.tti].push_back(std::bind(task, lcid, std::move(pdu)));
auto task = [this](uint32_t lcid, srslte::unique_byte_buffer_t& pdu, bool follow_on_flag) { add_dcch_pdu_impl(lcid, std::move(pdu), follow_on_flag); };
tti_actions[timing.tti].push_back(std::bind(task, lcid, std::move(pdu), follow_on_flag));
}
}
void add_dcch_pdu_impl(uint32_t lcid, unique_byte_buffer_t pdu)
void add_dcch_pdu_impl(uint32_t lcid, unique_byte_buffer_t pdu, bool follow_on_flag)
{
// push to PDCP and create DL grant for it
log.info("Writing PDU (%d B) to LCID=%d\n", pdu->N_bytes, lcid);
pdcp.write_sdu(lcid, std::move(pdu), true);
bearer_follow_on_map[lcid] = follow_on_flag;
}
void add_pch_pdu(unique_byte_buffer_t pdu)
@ -978,6 +979,7 @@ public:
dl_grant.tb[0].ndi_present = true;
dl_grant.tb[0].ndi = get_ndi_for_new_dl_tx(tti);
// Pass to UE
ue->new_tb(dl_grant, (const uint8_t*)mac_pdu_ptr);
}
@ -1146,6 +1148,7 @@ private:
// Simulator objects
srslte::rlc rlc;
srslte::pdcp pdcp;
std::map<uint32_t, bool> bearer_follow_on_map; ///< Indicates if for a given LCID the follow_on_flag is set or not
// security config
bool as_security_enabled = false;