@@ -171,54 +171,81 @@ void dl_sch_pdu::encode_subheader(bool F_bit, lcid_dl_sch_t lcid, unsigned heade
171171
172172// /////////////////////////
173173
174- class dl_sch_pdu_assembler ::dl_sch_pdu_logger
174+ class dl_sch_pdu_assembler ::pdu_log_builder
175175{
176176public:
177- explicit dl_sch_pdu_logger (du_ue_index_t ue_index_, rnti_t rnti_, units::bytes tbs_, srslog::basic_logger& logger_) :
178- ue_index(ue_index_), rnti(rnti_), tbs(tbs_), logger(logger_)
177+ explicit pdu_log_builder (du_ue_index_t ue_index_,
178+ rnti_t rnti_,
179+ units::bytes tbs_,
180+ fmt::memory_buffer& fmtbuf_,
181+ srslog::basic_logger& logger_) :
182+ ue_index(ue_index_), rnti(rnti_), tbs(tbs_), logger(logger_), fmtbuf(fmtbuf_), enabled(logger.info.enabled())
179183 {
184+ fmtbuf.clear ();
180185 }
181186
182187 void add_sdu (lcid_t lcid, unsigned len)
183188 {
184- if (not logger. info . enabled () ) {
189+ if (not enabled) {
185190 return ;
186191 }
187- fmt::format_to (fmtbuf, " {}SDU: lcid={} size={}" , separator (), lcid, len);
192+ if (lcid != current_sdu_lcid) {
193+ if (current_sdu_lcid != lcid_t ::INVALID_LCID) {
194+ fmt::format_to (fmtbuf, " SDU: lcid={} nof_sdus={} total_size={}" , current_sdu_lcid, nof_sdus, sum_bytes);
195+ }
196+ current_sdu_lcid = lcid;
197+ nof_sdus = 1 ;
198+ sum_bytes = units::bytes{len};
199+ } else {
200+ nof_sdus++;
201+ sum_bytes += units::bytes{len};
202+ }
188203 }
189204
190205 void add_conres_id (const ue_con_res_id_t & conres)
191206 {
192- if (not logger. info . enabled () ) {
207+ if (not enabled) {
193208 return ;
194209 }
195210 fmt::format_to (fmtbuf, " {}CON_RES: id={:x}" , separator (), fmt::join (conres, " " ));
196211 }
197212
198213 void add_ta_cmd (const ta_cmd_ce_payload& ce_payload)
199214 {
200- if (not logger. info . enabled () ) {
215+ if (not enabled) {
201216 return ;
202217 }
203218 fmt::format_to (fmtbuf, " {}TA_CMD: tag_id={}, ta_cmd={}" , separator (), ce_payload.tag_id , ce_payload.ta_cmd );
204219 }
205220
206221 void log ()
207222 {
208- if (not logger. info . enabled () ) {
223+ if (not enabled) {
209224 return ;
210225 }
226+
227+ // Log pending LCID SDUs.
228+ if (current_sdu_lcid != lcid_t ::INVALID_LCID) {
229+ fmt::format_to (fmtbuf, " SDU: lcid={} nof_sdus={} total_size={}" , current_sdu_lcid, nof_sdus, sum_bytes);
230+ }
231+
211232 logger.info (" DL PDU: ue={} rnti={} size={}: {}" , ue_index, rnti, tbs, to_c_str (fmtbuf));
212233 }
213234
214235private:
215236 const char * separator () const { return fmtbuf.size () == 0 ? " " : " , " ; }
216237
217- du_ue_index_t ue_index;
218- rnti_t rnti;
219- units::bytes tbs;
238+ du_ue_index_t ue_index;
239+ rnti_t rnti;
240+ units::bytes tbs;
241+
220242 srslog::basic_logger& logger;
221- fmt::memory_buffer fmtbuf;
243+ fmt::memory_buffer& fmtbuf;
244+ const bool enabled;
245+
246+ lcid_t current_sdu_lcid = lcid_t ::INVALID_LCID;
247+ unsigned nof_sdus = 0 ;
248+ units::bytes sum_bytes{0U };
222249};
223250
224251// /////////////////////////
@@ -247,7 +274,7 @@ span<const uint8_t> dl_sch_pdu_assembler::assemble_newtx_pdu(rnti_t
247274 }
248275 dl_sch_pdu ue_pdu (buffer.first (tb_size_bytes));
249276
250- dl_sch_pdu_logger pdu_logger{ue_mng.get_ue_index (rnti), rnti, units::bytes{tb_size_bytes}, logger};
277+ pdu_log_builder pdu_logger{ue_mng.get_ue_index (rnti), rnti, units::bytes{tb_size_bytes}, fmtbuf , logger};
251278
252279 // Encode added subPDUs.
253280 for (const dl_msg_lc_info& sched_lch : tb_info.lc_chs_to_sched ) {
@@ -275,7 +302,7 @@ span<const uint8_t> dl_sch_pdu_assembler::assemble_newtx_pdu(rnti_t
275302void dl_sch_pdu_assembler::assemble_sdus (dl_sch_pdu& ue_pdu,
276303 rnti_t rnti,
277304 const dl_msg_lc_info& lc_grant_info,
278- dl_sch_pdu_logger& pdu_logger)
305+ pdu_log_builder& pdu_logger)
279306{
280307 // Note: Do not attempt to build an SDU if there is not enough space for the MAC subheader, min payload size and
281308 // potential RLC header.
@@ -354,7 +381,7 @@ void dl_sch_pdu_assembler::assemble_sdus(dl_sch_pdu& ue_pdu,
354381void dl_sch_pdu_assembler::assemble_ce (dl_sch_pdu& ue_pdu,
355382 rnti_t rnti,
356383 const dl_msg_lc_info& subpdu,
357- dl_sch_pdu_logger& pdu_logger)
384+ pdu_log_builder& pdu_logger)
358385{
359386 switch (subpdu.lcid .value ()) {
360387 case lcid_dl_sch_t ::UE_CON_RES_ID: {
0 commit comments