From patchwork Tue May 31 11:25:37 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: gerrit-no-reply@lists.osmocom.org X-Patchwork-Id: 628149 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.osmocom.org (lists.osmocom.org [144.76.43.76]) by ozlabs.org (Postfix) with ESMTP id 3rJrlG6wn2z9t0t for ; Tue, 31 May 2016 21:25:46 +1000 (AEST) Received: from lists.osmocom.org (lists.osmocom.org [144.76.43.76]) by lists.osmocom.org (Postfix) with ESMTP id 27C382270E; Tue, 31 May 2016 11:25:45 +0000 (UTC) X-Original-To: openbsc@lists.osmocom.org Delivered-To: openbsc@lists.osmocom.org Received: from 127.0.1.12 (unknown [127.0.1.12]) by lists.osmocom.org (Postfix) with ESMTPA id D9ECE2268C; Tue, 31 May 2016 11:25:37 +0000 (UTC) Date: Tue, 31 May 2016 11:25:37 +0000 From: lynxis lazus Message-ID: X-Gerrit-MessageType: newchange Subject: [PATCH] osmo-pcu[master]: encoding/rlc_copy_from_aligned_buffer: export written payloa... X-Gerrit-Change-Id: I0e622acb1f13f7489946baf049de4ba1cde6a1fc X-Gerrit-ChangeURL: X-Gerrit-Commit: 3cf219e65bc770dac5ddd1e6f5e3c5c6ec361462 MIME-Version: 1.0 Content-Disposition: inline User-Agent: Gerrit/2.12.2-31-gb331dbd-dirty X-BeenThere: openbsc@lists.osmocom.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "Development of OpenBSC, OsmoBSC, OsmoNITB, OsmoCSCN" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: lynxis@fe80.eu Errors-To: openbsc-bounces@lists.osmocom.org Sender: "OpenBSC" Review at https://gerrit.osmocom.org/142 encoding/rlc_copy_from_aligned_buffer: export written payload bytes via an argument Require to count statistics for rlc_dl_payload_bytes. Change-Id: I0e622acb1f13f7489946baf049de4ba1cde6a1fc --- M src/encoding.cpp M src/encoding.h M src/tbf_dl.cpp M tests/edge/EdgeTest.cpp 4 files changed, 49 insertions(+), 31 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/42/142/1 diff --git a/src/encoding.cpp b/src/encoding.cpp index 9dba4f6..2102a1e 100644 --- a/src/encoding.cpp +++ b/src/encoding.cpp @@ -899,13 +899,13 @@ * \param num_chunks count the chunks (llc pdu data) within rlc/mac * \param data_block buffer holds rlc/mac data * \param is_final if this is the last rlc/mac within a TBF + * \param count_payload if not NULL save the written size of payload in bytes into it * \return the state of the rlc/mac like if there is more space for another chunk */ static Encoding::AppendResult rlc_data_to_dl_append_gprs( struct gprs_rlc_data_block_info *rdbi, gprs_llc *llc, int *offset, int *num_chunks, - uint8_t *data_block, - bool is_final) + uint8_t *data_block, bool is_final, int *count_payload) { int chunk; int space; @@ -930,6 +930,8 @@ *e_pointer |= 0x01; /* fill only space */ llc->consume(data, space); + if (count_payload) + *count_payload = space; /* return data block as message */ *offset = rdbi->data_len; (*num_chunks)++; @@ -947,6 +949,8 @@ *e_pointer |= 0x01; /* fill space */ llc->consume(data, space); + if (count_payload) + *count_payload = space; *offset = rdbi->data_len; (*num_chunks)++; rdbi->cv = 0; @@ -974,6 +978,8 @@ // no need to set e_pointer nor increase delimiter /* fill only space, which is 1 octet less than chunk */ llc->consume(data, space); + if (count_payload) + *count_payload = space; /* return data block as message */ *offset = rdbi->data_len; (*num_chunks)++; @@ -999,6 +1005,8 @@ (*num_chunks)++; /* copy (rest of) LLC frame to space and reset later */ llc->consume(data, chunk); + if (count_payload) + *count_payload = chunk; data += chunk; space -= chunk; (*offset) += chunk; @@ -1030,13 +1038,14 @@ * \param num_chunks count the chunks (llc pdu data) within rlc/mac * \param data_block buffer holds rlc/mac data * \param is_final if this is the last rlc/mac within a TBF + * \param count_payload if not NULL save the written size of payload in bytes into it * \return the state of the rlc/mac like if there is more space for another chunk */ static Encoding::AppendResult rlc_data_to_dl_append_egprs( struct gprs_rlc_data_block_info *rdbi, gprs_llc *llc, int *offset, int *num_chunks, uint8_t *data_block, - bool is_final) + bool is_final, int *count_payload) { int chunk; int space; @@ -1060,6 +1069,8 @@ chunk, space); /* fill only space */ llc->consume(data, space); + if (count_payload) + *count_payload = space; /* return data block as message */ *offset = rdbi->data_len; (*num_chunks)++; @@ -1074,6 +1085,8 @@ "header, and we are done\n", chunk, space); /* fill space */ llc->consume(data, space); + if (count_payload) + *count_payload = space; *offset = rdbi->data_len; (*num_chunks)++; rdbi->cv = 0; @@ -1088,6 +1101,8 @@ chunk, space); /* fill space */ llc->consume(data, space); + if (count_payload) + *count_payload = space; *offset = rdbi->data_len; (*num_chunks)++; return Encoding::AR_NEED_MORE_BLOCKS; @@ -1118,6 +1133,8 @@ (*num_chunks)++; /* copy (rest of) LLC frame to space and reset later */ llc->consume(data, chunk); + if (count_payload) + *count_payload = chunk; data += chunk; space -= chunk; (*offset) += chunk; @@ -1183,21 +1200,23 @@ * \param num_chunks count the chunks (llc pdu data) within rlc/mac * \param data_block buffer holds rlc/mac data * \param is_final if this is the last rlc/mac within a TBF + * \param count_payload if not NULL save the written size of payload in bytes into it * \return the state of the rlc/mac like if there is more space for another chunk */ Encoding::AppendResult Encoding::rlc_data_to_dl_append( struct gprs_rlc_data_block_info *rdbi, GprsCodingScheme cs, gprs_llc *llc, int *offset, int *num_chunks, - uint8_t *data_block, - bool is_final) + uint8_t *data_block, bool is_final, int *count_payload) { if (cs.isGprs()) return rlc_data_to_dl_append_gprs(rdbi, - llc, offset, num_chunks, data_block, is_final); + llc, offset, num_chunks, data_block, is_final, + count_payload); if (cs.isEgprs()) return rlc_data_to_dl_append_egprs(rdbi, - llc, offset, num_chunks, data_block, is_final); + llc, offset, num_chunks, data_block, is_final, + count_payload); LOGP(DRLCMACDL, LOGL_ERROR, "%s data block encoding not implemented\n", cs.name()); diff --git a/src/encoding.h b/src/encoding.h index 94e9a02..710de78 100644 --- a/src/encoding.h +++ b/src/encoding.h @@ -91,6 +91,5 @@ static AppendResult rlc_data_to_dl_append( struct gprs_rlc_data_block_info *rdbi, GprsCodingScheme cs, gprs_llc *llc, int *offset, int *num_chunks, - uint8_t *data, - bool is_final); + uint8_t *data, bool is_final, int *count_payload); }; diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp index da6628a..00adbc9 100644 --- a/src/tbf_dl.cpp +++ b/src/tbf_dl.cpp @@ -538,7 +538,7 @@ is_final = llc_queue()->size() == 0 && !keep_open(fn); ar = Encoding::rlc_data_to_dl_append(rdbi, cs, - &m_llc, &write_offset, &num_chunks, data, is_final); + &m_llc, &write_offset, &num_chunks, data, is_final, NULL); if (ar == Encoding::AR_NEED_MORE_BLOCKS) break; diff --git a/tests/edge/EdgeTest.cpp b/tests/edge/EdgeTest.cpp index 96ea0c1..fef4abb 100644 --- a/tests/edge/EdgeTest.cpp +++ b/tests/edge/EdgeTest.cpp @@ -524,7 +524,7 @@ llc.put_frame(llc_data, 11); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_COMPLETED_SPACE_LEFT); OSMO_ASSERT(rdbi.e == 0); @@ -535,7 +535,7 @@ llc.put_frame(llc_data, 26); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_COMPLETED_SPACE_LEFT); OSMO_ASSERT(rdbi.e == 0); @@ -546,7 +546,7 @@ llc.put_frame(llc_data, 99); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_NEED_MORE_BLOCKS); OSMO_ASSERT(rdbi.e == 0); @@ -571,7 +571,7 @@ llc.put_frame(llc_data, 20); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_NEED_MORE_BLOCKS); OSMO_ASSERT(rdbi.e == 0); @@ -590,7 +590,7 @@ OSMO_ASSERT(llc.chunk_size() == 1); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_COMPLETED_SPACE_LEFT); OSMO_ASSERT(rdbi.e == 0); @@ -601,7 +601,7 @@ llc.put_frame(llc_data, 99); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_NEED_MORE_BLOCKS); OSMO_ASSERT(rdbi.e == 0); @@ -624,7 +624,7 @@ llc.put_frame(llc_data, 7); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_COMPLETED_SPACE_LEFT); OSMO_ASSERT(rdbi.e == 0); @@ -635,7 +635,7 @@ llc.put_frame(llc_data, 11); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_COMPLETED_BLOCK_FILLED); OSMO_ASSERT(rdbi.e == 0); @@ -659,7 +659,7 @@ llc.put_frame(llc_data, 99); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_NEED_MORE_BLOCKS); OSMO_ASSERT(rdbi.e == 1); @@ -705,7 +705,7 @@ llc.put_frame(llc_data, 30); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_NEED_MORE_BLOCKS); OSMO_ASSERT(rdbi.e == 1); @@ -723,7 +723,7 @@ OSMO_ASSERT(llc.chunk_size() == 10); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_COMPLETED_SPACE_LEFT); OSMO_ASSERT(rdbi.e == 0); @@ -734,7 +734,7 @@ llc.put_frame(llc_data, 99); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_NEED_MORE_BLOCKS); OSMO_ASSERT(rdbi.e == 0); @@ -757,7 +757,7 @@ llc.put_frame(llc_data, 11); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_COMPLETED_SPACE_LEFT); OSMO_ASSERT(rdbi.e == 0); @@ -768,7 +768,7 @@ llc.put_frame(llc_data, 26); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_COMPLETED_SPACE_LEFT); OSMO_ASSERT(rdbi.e == 0); @@ -779,7 +779,7 @@ llc.put_frame(llc_data, 99); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_NEED_MORE_BLOCKS); OSMO_ASSERT(rdbi.e == 0); @@ -809,7 +809,7 @@ llc.put_frame(llc_data, 15); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_COMPLETED_SPACE_LEFT); OSMO_ASSERT(rdbi.e == 0); @@ -820,7 +820,7 @@ llc.put_frame(llc_data, 12); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_NEED_MORE_BLOCKS); OSMO_ASSERT(rdbi.e == 0); @@ -840,7 +840,7 @@ OSMO_ASSERT(llc.chunk_size() == 0); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_COMPLETED_SPACE_LEFT); OSMO_ASSERT(rdbi.e == 0); @@ -851,7 +851,7 @@ llc.put_frame(llc_data, 7); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_COMPLETED_SPACE_LEFT); OSMO_ASSERT(rdbi.e == 0); @@ -863,7 +863,7 @@ llc.put_frame(llc_data, 18); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_COMPLETED_BLOCK_FILLED); OSMO_ASSERT(rdbi.e == 0); @@ -886,7 +886,7 @@ llc.put_frame(llc_data, 6); ar = Encoding::rlc_data_to_dl_append(&rdbi, cs, - &llc, &write_offset, &num_chunks, data, false); + &llc, &write_offset, &num_chunks, data, false, NULL); OSMO_ASSERT(ar == Encoding::AR_COMPLETED_SPACE_LEFT); OSMO_ASSERT(rdbi.e == 0);