aboutsummaryrefslogtreecommitdiffstats
path: root/src/decoding.cpp
AgeCommit message (Collapse)AuthorFilesLines
2021-01-19Convert gprs_bssgp_pcu.cpp to CPau Espin Pedrol1-2/+2
There's no real use of C++ in that file, and it causes problems when using llist_head entry macros in future patches adding initial support for multiple BTS in PCU object, so let's move it to plain C. Change-Id: Ic771a89fd78b5e66151a5384f0ff6a8895589466
2020-06-30decoding.cpp: Improve logging in malformed UL data parsingPau Espin Pedrol1-2/+2
Change-Id: Ic4ad14b88fddde8d9e62e0a2587b501d36821f01
2020-05-20Get rid of class GprsCodingSchemePau Espin Pedrol1-11/+11
We have same kind of object splitted into two layers, in coding_scheme and gprs_coding_scheme. Let's merge them together and get rid of the class, which is not really useful because it's only a set of functions operating on one enum value. This change also fixes gcc 10.1.0 error about memseting a complex type in rlc.h init(). Change-Id: Ie9ce2144ba9e8dbba9704d4e0000a2929e3e41df
2019-07-17fix spelling errors detected by lintianThorsten Alteholz1-3/+3
Change-Id: I381618eb55cc513cfa9c2e384c27cead0935c8bf
2019-03-26MCS: add mcs_is_*() helpersMax1-2/+2
In preparation for Channel Coding Command encoder in follow-up patches let's add necessary helpers. Those are similar to previously used helpers from GprsCodingScheme class but without CamelCase and with less typo chances between Gprs and Egprs cases. Change-Id: I6699cbc8d7ae766fa4d2b3d37e5f9ff1cf158b7e
2019-03-19MCS: use value_string for conversionMax1-1/+1
Change-Id: I212ebb892ab162821633974d5a6c7e315d308370
2019-03-19MCS: move HeaderType enum outside of class definitionMax1-4/+4
Move functions which compute number of blocks or bits depending on header type and corresponding enum outside of GprsCodingScheme class. This will allows us to use standard libosmocore value_sting functions in upcoming patches for IA Rest Octet encoding/decoding. Change-Id: Id0873f85e1f16a72e17e7fbc4ad76b194917067f
2016-12-02Add debugging log for RLC data block decodingMrinal Mishra1-0/+9
Added debugging log for RLC UL Data Block decoding for both GPRS/EGPRS cases. Change-Id: I8c197bdc4cd1330cbab0adfd188336d27682cec4
2016-10-17EGPRS: Add EPDAN CRBB Tree based decodingPravin Kumarvel1-12/+9
Implemented tree based algorithm to decode compressed bitmap in EPDAN as described in section 9.1.10 of 3GPP 44.060. This algorithm intends to improve the performance over existing method. New Regression test is added under bitcomp directory. Test case is added to validate decompressed result of the bitmap Present in EPDAN. Test is done for multiple bitmaps of varying length. Invalid inputs are also part of the test vector. Change-Id: Ieae1992ed4b02bb1e09eec2d3de1a030eabd16ce
2016-09-15EGPRS: Fix issue with row 4 of Table 10.4.14a.1 of 44.060 version 7.27.0 ↵Aravind Sirsikar1-5/+2
Release 7 row 4 of Table 10.4.14a.1 of Spec 44.060 version 7.27.0 Release 7. Says "The previous RLC data block contains a Upper Layer PDU, or a part of it, that fills precisely the previous data block and for which there is no length indicator in that RLC data block. The current RLC data block contains a Upper Layer PDU that either fills the current RLC data block precisely or continues in the next RLC data block." So when we receive block with 1st LI: value=0 and Value of E bit in the same octet as 1, we expect 2 chunks with 1st chunk as length as 0 and complete and 2nd chunk as length non zero. But with this bug we see only 1 chunk causing incorrect assembling This issue has been fixed in this patch. Related: OS#1811 Change-Id: I2cd0fca3ed28a553ede3f4b8a7d3267284dd2c9b
2016-07-14egprs: Use RLC/MAC headers from libosmocoreTom Tsou1-9/+10
EGPRS Type 1, 2, and 3 headers are used by OsmoPCU and OsmoBTS. Move the header definitions to libosmocore to be shared by both packages. Modify the struct variable naming to use *_hi/*_lo instead of *_a/*_b in order to be consistent with existing naming used in libosmocore. Change-Id: I98687ad981d27502aec42729611937ba1caf207c
2016-06-16Add header type 1 support for EGPRS uplinkAravind Sirsikar1-2/+61
Function is added to parse the EGPRS header type 1 in uplink tbf path. along with configuration parameter updation to reflect max mcs in UL Change-Id: I13c250e2e07377982ac3f29745f3cffd4088552a Reviewed-on: https://gerrit.osmocom.org/270 Reviewed-by: Harald Welte <laforge@gnumonks.org> Tested-by: Jenkins Builder
2016-06-16Add Header Type2 support in EGPRS ULAravind Sirsikar1-3/+49
This patch will add support for MCS5,6 in EGPRS UL along with incorrect assert correction to let MCS 6 work. Change-Id: Iac2422c8acbdcefe20aafbba6a4eb87c9893e3ba Reviewed-on: https://gerrit.osmocom.org/269 Tested-by: Jenkins Builder Reviewed-by: Harald Welte <laforge@gnumonks.org>
2016-06-01decoding: remove superfluous double-semicolonAlexander Couzens1-1/+1
Change-Id: I48ec24f2e10620279cbcbf39c70a4be6438f6b0f Reviewed-on: https://gerrit.osmocom.org/140 Reviewed-by: Harald Welte <laforge@gnumonks.org> Tested-by: Jenkins Builder
2016-05-31decoding: improve and add commentsAlexander Couzens1-1/+2
Change-Id: I45c9fc55243224909ca2fdece8cbfa686b0f444d Reviewed-on: https://gerrit.osmocom.org/139 Tested-by: Jenkins Builder Reviewed-by: Harald Welte <laforge@gnumonks.org>
2016-03-30Refactor the Uplink RLC header parsing functionBhargava Abhyankar1-64/+76
Parsing the uplink data header for GPRS and EGPRS header type 3 is handled in separate functions. This patch will enhance modularity of the code.
2016-02-08rlc: Use the rlc structure to access the data unit in the RLC messageJacob Erlbeck1-17/+21
Currently most offsets are hard-coded which makes it difficult to access the data units and their headers when padding has to be taken into account. These offset are already provided by the gprs_rlc_data_info_init_ul/dl functions. Change the encoder/decoder to use these values. Note that some assumptions (bit alignment) are still present in the code and checked by assertions. Sponsored-by: On-Waves ehf
2016-02-08edge: Add a bitvec based Decoding::extract_rbb functionJacob Erlbeck1-0/+12
This shall replace the old one after the transition to bitvec based RBBs. Sponsored-by: On-Waves ehf
2016-02-08decode: Add bitvec based GPRS DL ACK/NACK decoderJacob Erlbeck1-0/+47
Currently the RBB is used and passed directly to the window handling methods. For EGPRS a more abstract bitvec is derived from the messages and will passed around instead. Add a similar function for GPRS so that the same window handling can be used for GPRS and EGPRS. Sponsored-by: On-Waves ehf
2016-02-08edge: Enable CRBB decodingJacob Erlbeck1-13/+1
Currently CRBB bitmaps are ignored if they are present. This commit enables the decoding. Note that this requires osmo_t4_decode in libosmocore. Sponsored-by: On-Waves ehf
2016-02-08edge: Add experimental support for uplink CRBBJacob Erlbeck1-27/+67
Currently only uncompressed bitmaps (URBB) are supported in PACKET UPLINK ACK/NACK messages. Extend decode_egprs_acknack_bits to decode compressed bitmaps (CRBB), too. Note that this code is only active, if the macro WITH_CRBB_DECODING is defined. Sponsored-by: On-Waves ehf
2016-02-08edge: Handle EGPRS PACKET DOWNLINK ACK NACKJacob Erlbeck1-0/+91
Currently this message is ignored. Support decoding and handling of this message. Use a bitvec for the decoder that just represents a BSN sequence without any encoding details (first bit -> first BSN). Return the corresponding BSN range (snsmod(bsn_begin + bits_in_bitvec) = bsn_end), so snsmod(bsn_end-1) is the last BSN if there is at least 1. If bsn_begin == bsn_end, no BSNs has been added. Note that this bitvec is not yet used for RBB handling. It just calls the old rcvd_dl_ack with a faked (all bits are 1) RBB map. Sponsored-by: On-Waves ehf
2016-02-05tbf: Remove obsolete TLLI functionsJacob Erlbeck1-41/+0
This commit removes gprs_rlcmac_tbf::extract_tlli and Decoding::tlli_from_ul_data. Sponsored-by: On-Waves ehf
2016-02-05edge: Rename gprs_rlc_ul_header_egprs and gprs_rlc_ul_data_block_infoJacob Erlbeck1-5/+5
These struct names are more specific than necessary. They are used for GPRS (uplink) already. In downlink direction, only a few fields will be added to the header struct. Add addition, gprs_rlc_ul_header_egprs does not map directly to an encoded header, like many other 'header' structs do. Change the names to fit both modes and both directions: gprs_rlc_ul_header_egprs -> gprs_rlc_data_info gprs_rlc_ul_data_block_info -> gprs_rlc_data_block_info Sponsored-by: On-Waves ehf
2016-01-08edge: Remove leftover comments from encoding.cJacob Erlbeck1-8/+0
Sponsored-by: On-Waves ehf
2016-01-08edge: Fix data block decoder (Coverity)Jacob Erlbeck1-1/+7
Use a signed integer instead of an unsigned one for num_chunks which can set to a negative value on error. Ensure that chunks is not dereferenced if it is NULL. In fact that will not happen currently, since num_chunks is now always <= 0 if chunks == NULL. Fixes: Coverity CID 1347433, 1347434, 1347435 Sponsored-by: On-Waves ehf
2015-12-16edge: Add unified decoder methods for GPRS/EGPRSJacob Erlbeck1-0/+422
This commit adds new RLC block decoder functions that support both GPRS and EGPRS. The code path is selected based on the value of the GprsCodingScheme cs object. - rlc_parse_ul_data_header parses the header of an RLC data block including the E and FBI/TI flags (currently supported CS-1 - CS-4, MCS-1 - MCS-4). - rlc_copy_to_aligned_buffer copies an RLC data unit to a byte aligned buffer and returns the unit's length. - rlc_get_data_aligned is a convenience wrapper around rlc_copy_to_aligned_buffer that avoids copying if the data unit is already byte aligned. Sponsored-by: On-Waves ehf
2015-11-30edge: Get EGPRS multislot classJacob Erlbeck1-0/+15
The EGPRS MS class ist contained in the MS_RA_capability information. Its presence indicates, that the MS is able (and willing) to use EGPRS. This commit implements basic support for retrieving, storing, and showing it in the VTY. The information is stored in the MS object. Sponsored-by: On-Waves ehf
2013-12-12decoding: Cosmetic - change rbb decodingDaniel Willmann1-2/+4
2013-12-12decoding: Use 'I' and 'R' in rbb array for DLDaniel Willmann1-1/+1
We want to match up rbb decoding and encoding so it helps to use the same chars.
2013-11-26tbf/rlc: Move the parsing of RBB to Decoding, move window marking outHolger Hans Peter Freyther1-0/+14
Move the parsing of the bitbmap out of the TBF code into Decoding. Move the updating of the V_B into the V_B class. Add some comments about handling the mod_sns, mod_sns_half parameters by using template code.
2013-10-30pdch: Move the giant switch/case of gprs_rlcmac_rcv_control_blockHolger Hans Peter Freyther1-0/+15
Move the dispatch into the PDCH. This needs to be split up further into understandable blocks.
2013-10-30pdch/tbf: Move gprs_rlcmac_rcv_data_block_acknowledged into the pdchHolger Hans Peter Freyther1-0/+70
Move the method into the PDCH. Extract the finding of TLLI into a new class called Decoding. Move the assemble and forward LLC frames into the TBF as it is poking in the internals of the TBF.