diff --git a/src/bts.cpp b/src/bts.cpp index 5e1725c1..8edde232 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -664,12 +664,21 @@ uint32_t BTS::rfn_to_fn(int32_t rfn) return fn; } -static inline uint16_t mslot_class_from_ra(uint16_t ra, bool is_11bit) +/* 3GPP TS 44.060: + * Table 11.2.5.3: PACKET CHANNEL REQUEST + * Table 11.2.5a.3: EGPRS PACKET CHANNEL REQUEST + * Both GPRS and EGPRS use same MultislotClass coding, but since use of PCCCH is + * deprecated, no PACKET CHANNEL REQUEST exists, which means for GPRS we will + * receive CCCH RACH which doesn't contain any mslot class. Hence in the end we + * can only receive EGPRS mslot class through 11-bit EGPRS PACKET CHANNEL + * REQUEST. + */ +static inline uint16_t egprs_mslot_class_from_ra(uint16_t ra, bool is_11bit) { if (is_11bit) return (ra & 0x3e0) >> 5; - /* set multislot class to 0 for 8-bit RACH, since we don't know it yet */ + /* set EGPRS multislot class to 0 for 8-bit RACH, since we don't know it yet */ return 0; } @@ -741,7 +750,7 @@ int BTS::rcv_rach(uint16_t ra, uint32_t Fn, int16_t qta, bool is_11bit, int plen; uint8_t usf = 7; uint8_t tsc = 0, ta = qta2ta(qta); - uint16_t ms_class = mslot_class_from_ra(ra, is_11bit); + uint16_t egprs_ms_class = egprs_mslot_class_from_ra(ra, is_11bit); bool failure = false; rach_frame(); @@ -784,8 +793,7 @@ int BTS::rcv_rach(uint16_t ra, uint32_t Fn, int16_t qta, bool is_11bit, } else { // Create new TBF /* FIXME: Copy and paste with other routines.. */ - - tbf = tbf_alloc_ul_tbf(&m_bts, NULL, -1, 0, ms_class, true); + tbf = tbf_alloc_ul_tbf(&m_bts, NULL, -1, 0, egprs_ms_class, true); if (!tbf) { LOGP(DRLCMAC, LOGL_NOTICE, "No PDCH resource sending "