mirror of https://github.com/PentHertz/srsLTE.git
lib,rlc: changed back status and header logging helpers to log directly. Make sure RB name is automatically logged.
This commit is contained in:
parent
00a60dbb97
commit
9bd368e0a9
|
@ -62,8 +62,67 @@ bool rlc_am_is_unaligned(const uint8_t fi);
|
||||||
bool rlc_am_not_start_aligned(const uint8_t fi);
|
bool rlc_am_not_start_aligned(const uint8_t fi);
|
||||||
std::string
|
std::string
|
||||||
rlc_am_undelivered_sdu_info_to_string(const std::map<uint32_t, pdcp_pdu_info<rlc_amd_pdu_header_t> >& info_queue);
|
rlc_am_undelivered_sdu_info_to_string(const std::map<uint32_t, pdcp_pdu_info<rlc_amd_pdu_header_t> >& info_queue);
|
||||||
std::string rlc_amd_pdu_header_to_string(const rlc_amd_pdu_header_t& header);
|
|
||||||
std::string rlc_am_status_pdu_to_string(rlc_status_pdu_t* status);
|
template <typename... Args>
|
||||||
|
void log_rlc_amd_pdu_header_to_string(srslog::log_channel& log_ch,
|
||||||
|
const std::string& rb_name,
|
||||||
|
const char* fmt_str,
|
||||||
|
const rlc_amd_pdu_header_t& header,
|
||||||
|
Args&&... args)
|
||||||
|
{
|
||||||
|
if (not log_ch.enabled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt::memory_buffer buffer;
|
||||||
|
fmt::format_to(buffer,
|
||||||
|
"{}: [{}, RF={}, P={}, FI={}, SN={}, LSF={}, SO={}, N_li={}",
|
||||||
|
rb_name,
|
||||||
|
rlc_dc_field_text[header.dc],
|
||||||
|
(header.rf ? "1" : "0"),
|
||||||
|
(header.p ? "1" : "0"),
|
||||||
|
(header.fi ? "1" : "0"),
|
||||||
|
header.sn,
|
||||||
|
(header.lsf ? "1" : "0"),
|
||||||
|
header.so,
|
||||||
|
header.N_li);
|
||||||
|
if (header.N_li > 0) {
|
||||||
|
fmt::format_to(buffer, " ({}", header.li[0]);
|
||||||
|
for (uint32_t i = 1; i < header.N_li; ++i) {
|
||||||
|
fmt::format_to(buffer, ", {}", header.li[i]);
|
||||||
|
}
|
||||||
|
fmt::format_to(buffer, ")");
|
||||||
|
}
|
||||||
|
fmt::format_to(buffer, "]");
|
||||||
|
|
||||||
|
log_ch(fmt_str, std::forward<Args>(args)..., to_c_str(buffer));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename... Args>
|
||||||
|
void log_rlc_am_status_pdu_to_string(srslog::log_channel& log_ch,
|
||||||
|
const std::string& rb_name,
|
||||||
|
const char* fmt_str,
|
||||||
|
rlc_status_pdu_t* status,
|
||||||
|
Args&&... args)
|
||||||
|
{
|
||||||
|
if (not log_ch.enabled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fmt::memory_buffer buffer;
|
||||||
|
fmt::format_to(buffer, "{}: ACK_SN = {}, N_nack = {}", rb_name, status->ack_sn, status->N_nack);
|
||||||
|
if (status->N_nack > 0) {
|
||||||
|
fmt::format_to(buffer, ", NACK_SN = ");
|
||||||
|
for (uint32_t i = 0; i < status->N_nack; ++i) {
|
||||||
|
if (status->nacks[i].has_so) {
|
||||||
|
fmt::format_to(
|
||||||
|
buffer, "[{} {}:{}]", status->nacks[i].nack_sn, status->nacks[i].so_start, status->nacks[i].so_end);
|
||||||
|
} else {
|
||||||
|
fmt::format_to(buffer, "[{}]", status->nacks[i].nack_sn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log_ch(fmt_str, std::forward<Args>(args)..., to_c_str(buffer));
|
||||||
|
}
|
||||||
} // namespace srsran
|
} // namespace srsran
|
||||||
|
|
||||||
#endif // SRSRAN_RLC_AM_LTE_PACKING_H
|
#endif // SRSRAN_RLC_AM_LTE_PACKING_H
|
||||||
|
|
|
@ -438,7 +438,7 @@ int rlc_am_lte_tx::build_status_pdu(uint8_t* payload, uint32_t nof_bytes)
|
||||||
RlcDebug("Deferred Status PDU. Cause: Failed to acquire Rx lock");
|
RlcDebug("Deferred Status PDU. Cause: Failed to acquire Rx lock");
|
||||||
pdu_len = 0;
|
pdu_len = 0;
|
||||||
} else if (pdu_len > 0 && nof_bytes >= static_cast<uint32_t>(pdu_len)) {
|
} else if (pdu_len > 0 && nof_bytes >= static_cast<uint32_t>(pdu_len)) {
|
||||||
RlcInfo("Tx status PDU - %s", rlc_am_status_pdu_to_string(&tx_status));
|
log_rlc_am_status_pdu_to_string(logger.info, rb_name, "Tx status PDU - %s", &tx_status);
|
||||||
if (cfg.t_status_prohibit > 0 && status_prohibit_timer.is_valid()) {
|
if (cfg.t_status_prohibit > 0 && status_prohibit_timer.is_valid()) {
|
||||||
// re-arm timer
|
// re-arm timer
|
||||||
status_prohibit_timer.run();
|
status_prohibit_timer.run();
|
||||||
|
@ -528,7 +528,7 @@ int rlc_am_lte_tx::build_retx_pdu(uint8_t* payload, uint32_t nof_bytes)
|
||||||
tx_window[retx.sn].buf->N_bytes,
|
tx_window[retx.sn].buf->N_bytes,
|
||||||
tx_window[retx.sn].retx_count + 1,
|
tx_window[retx.sn].retx_count + 1,
|
||||||
cfg.max_retx_thresh);
|
cfg.max_retx_thresh);
|
||||||
RlcDebug("%s", rlc_amd_pdu_header_to_string(new_header));
|
log_rlc_amd_pdu_header_to_string(logger.debug, rb_name, "Tx PDU - %s", new_header);
|
||||||
|
|
||||||
debug_state();
|
debug_state();
|
||||||
return (ptr - payload) + tx_window[retx.sn].buf->N_bytes;
|
return (ptr - payload) + tx_window[retx.sn].buf->N_bytes;
|
||||||
|
@ -551,8 +551,7 @@ int rlc_am_lte_tx::build_segment(uint8_t* payload, uint32_t nof_bytes, rlc_amd_r
|
||||||
|
|
||||||
pdu_without_poll++;
|
pdu_without_poll++;
|
||||||
byte_without_poll += (tx_window[retx.sn].buf->N_bytes + rlc_am_packed_length(&new_header));
|
byte_without_poll += (tx_window[retx.sn].buf->N_bytes + rlc_am_packed_length(&new_header));
|
||||||
RlcInfo("pdu_without_poll: %d", pdu_without_poll);
|
RlcInfo("pdu_without_poll: %d, byte_without_poll: %d", pdu_without_poll, byte_without_poll);
|
||||||
RlcInfo("byte_without_poll: %d", byte_without_poll);
|
|
||||||
|
|
||||||
new_header.dc = RLC_DC_FIELD_DATA_PDU;
|
new_header.dc = RLC_DC_FIELD_DATA_PDU;
|
||||||
new_header.rf = 1;
|
new_header.rf = 1;
|
||||||
|
@ -909,7 +908,7 @@ int rlc_am_lte_tx::build_data_pdu(uint8_t* payload, uint32_t nof_bytes)
|
||||||
memcpy(ptr, buffer_ptr->msg, buffer_ptr->N_bytes);
|
memcpy(ptr, buffer_ptr->msg, buffer_ptr->N_bytes);
|
||||||
int total_len = (ptr - payload) + buffer_ptr->N_bytes;
|
int total_len = (ptr - payload) + buffer_ptr->N_bytes;
|
||||||
RlcHexInfo(payload, total_len, "Tx PDU SN=%d (%d B)", header.sn, total_len);
|
RlcHexInfo(payload, total_len, "Tx PDU SN=%d (%d B)", header.sn, total_len);
|
||||||
RlcDebug("%s", rlc_amd_pdu_header_to_string(header));
|
log_rlc_amd_pdu_header_to_string(logger.debug, rb_name, "%s", header);
|
||||||
debug_state();
|
debug_state();
|
||||||
|
|
||||||
return total_len;
|
return total_len;
|
||||||
|
@ -933,7 +932,7 @@ void rlc_am_lte_tx::handle_control_pdu(uint8_t* payload, uint32_t nof_bytes)
|
||||||
|
|
||||||
rlc_am_read_status_pdu(payload, nof_bytes, &status);
|
rlc_am_read_status_pdu(payload, nof_bytes, &status);
|
||||||
|
|
||||||
RlcInfo("Rx Status PDU %s", rlc_am_status_pdu_to_string(&status));
|
log_rlc_am_status_pdu_to_string(logger.info, rb_name, "Rx Status PDU %s", &status);
|
||||||
|
|
||||||
// make sure ACK_SN is within our Tx window
|
// make sure ACK_SN is within our Tx window
|
||||||
if (((MOD + status.ack_sn - vt_a) % MOD > RLC_AM_WINDOW_SIZE) ||
|
if (((MOD + status.ack_sn - vt_a) % MOD > RLC_AM_WINDOW_SIZE) ||
|
||||||
|
@ -1268,7 +1267,7 @@ void rlc_am_lte_rx::handle_data_pdu_full(uint8_t* payload, uint32_t nof_bytes, r
|
||||||
std::map<uint32_t, rlc_amd_rx_pdu>::iterator it;
|
std::map<uint32_t, rlc_amd_rx_pdu>::iterator it;
|
||||||
|
|
||||||
RlcHexInfo(payload, nof_bytes, "Rx data PDU SN=%d (%d B)", header.sn, nof_bytes);
|
RlcHexInfo(payload, nof_bytes, "Rx data PDU SN=%d (%d B)", header.sn, nof_bytes);
|
||||||
RlcDebug("%s", rlc_amd_pdu_header_to_string(header));
|
log_rlc_amd_pdu_header_to_string(logger.debug, rb_name, "%s", header);
|
||||||
|
|
||||||
// sanity check for segments not exceeding PDU length
|
// sanity check for segments not exceeding PDU length
|
||||||
if (header.N_li > 0) {
|
if (header.N_li > 0) {
|
||||||
|
@ -1387,7 +1386,7 @@ void rlc_am_lte_rx::handle_data_pdu_segment(uint8_t* payload, uint32_t nof_bytes
|
||||||
nof_bytes,
|
nof_bytes,
|
||||||
header.so,
|
header.so,
|
||||||
header.N_li);
|
header.N_li);
|
||||||
RlcDebug("%s", rlc_amd_pdu_header_to_string(header));
|
log_rlc_amd_pdu_header_to_string(logger.debug, rb_name, "Rx data PDU segment %s", header);
|
||||||
|
|
||||||
// Check inside rx window
|
// Check inside rx window
|
||||||
if (!inside_rx_window(header.sn)) {
|
if (!inside_rx_window(header.sn)) {
|
||||||
|
|
|
@ -309,50 +309,4 @@ bool rlc_am_not_start_aligned(const uint8_t fi)
|
||||||
return (fi == RLC_FI_FIELD_NOT_START_ALIGNED || fi == RLC_FI_FIELD_NOT_START_OR_END_ALIGNED);
|
return (fi == RLC_FI_FIELD_NOT_START_ALIGNED || fi == RLC_FI_FIELD_NOT_START_OR_END_ALIGNED);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Logging helpers
|
|
||||||
*/
|
|
||||||
std::string rlc_amd_pdu_header_to_string(const rlc_amd_pdu_header_t& header)
|
|
||||||
{
|
|
||||||
fmt::memory_buffer buffer;
|
|
||||||
fmt::format_to(buffer,
|
|
||||||
"[{}, RF={}, P={}, FI={}, SN={}, LSF={}, SO={}, N_li={}",
|
|
||||||
rlc_dc_field_text[header.dc],
|
|
||||||
(header.rf ? "1" : "0"),
|
|
||||||
(header.p ? "1" : "0"),
|
|
||||||
(header.fi ? "1" : "0"),
|
|
||||||
header.sn,
|
|
||||||
(header.lsf ? "1" : "0"),
|
|
||||||
header.so,
|
|
||||||
header.N_li);
|
|
||||||
if (header.N_li > 0) {
|
|
||||||
fmt::format_to(buffer, " ({}", header.li[0]);
|
|
||||||
for (uint32_t i = 1; i < header.N_li; ++i) {
|
|
||||||
fmt::format_to(buffer, ", {}", header.li[i]);
|
|
||||||
}
|
|
||||||
fmt::format_to(buffer, ")");
|
|
||||||
}
|
|
||||||
fmt::format_to(buffer, "]");
|
|
||||||
|
|
||||||
return fmt::to_string(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string rlc_am_status_pdu_to_string(rlc_status_pdu_t* status)
|
|
||||||
{
|
|
||||||
fmt::memory_buffer buffer;
|
|
||||||
fmt::format_to(buffer, "ACK_SN = {}, N_nack = {}", status->ack_sn, status->N_nack);
|
|
||||||
if (status->N_nack > 0) {
|
|
||||||
fmt::format_to(buffer, ", NACK_SN = ");
|
|
||||||
for (uint32_t i = 0; i < status->N_nack; ++i) {
|
|
||||||
if (status->nacks[i].has_so) {
|
|
||||||
fmt::format_to(
|
|
||||||
buffer, "[{} {}:{}]", status->nacks[i].nack_sn, status->nacks[i].so_start, status->nacks[i].so_end);
|
|
||||||
} else {
|
|
||||||
fmt::format_to(buffer, "[{}]", status->nacks[i].nack_sn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return fmt::to_string(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace srsran
|
} // namespace srsran
|
||||||
|
|
Loading…
Reference in New Issue