forked from cellular-infrastructure/osmo-pcu
bts: Release DL TBF instead of killing in rcv_resource_request
Currently an existing DL TBF is freed immediately, when a resource request is received. This makes sense since the MS might have dropped it when switching to the PDCH signaled via the AGCH for the SBA. But if the TBF still is assumed to exist on the MS side, there might be TFI collisions if the old TBF object is not kept to block its TFI for some time. This commit changes rcv_resource_request to call release() instead of tbf_free() on the DL TBF object (if it exists). Sponsored-by: On-Waves ehf
This commit is contained in:
parent
91ff7d1864
commit
ae0a799f44
12
src/bts.cpp
12
src/bts.cpp
|
@ -984,17 +984,23 @@ void gprs_rlcmac_pdch::rcv_resource_request(Packet_Resource_Request_t *request,
|
|||
"TLLI=0x%08x while %s still "
|
||||
"exists. Killing pending UL TBF\n",
|
||||
tlli, tbf_name(ul_tbf));
|
||||
/* The MS will not use the old TBF again, so we can
|
||||
* safely throw it away immediately */
|
||||
tbf_free(ul_tbf);
|
||||
ul_tbf = NULL;
|
||||
}
|
||||
|
||||
if (dl_tbf) {
|
||||
/* TODO: There a chance that releasing dl_tbf can be
|
||||
* avoided if this PDCH is the control TS of dl_tbf,
|
||||
* but this needs to be checked with the spec. If an MS
|
||||
* losed the DL TBF because of PDCH mismatches only,
|
||||
* this check would make sense. */
|
||||
LOGP(DRLCMACUL, LOGL_NOTICE, "Got RACH from "
|
||||
"TLLI=0x%08x while %s still exists. "
|
||||
"Killing pending DL TBF\n", tlli,
|
||||
"Release pending DL TBF\n", tlli,
|
||||
tbf_name(dl_tbf));
|
||||
tbf_free(dl_tbf);
|
||||
dl_tbf = NULL;
|
||||
dl_tbf->release();
|
||||
}
|
||||
LOGP(DRLCMAC, LOGL_DEBUG, "MS requests UL TBF "
|
||||
"in packet resource request of single "
|
||||
|
|
|
@ -1792,12 +1792,9 @@ Searching for first unallocated TFI: TRX=0
|
|||
Found TFI=0.
|
||||
+++++++++++++++++++++++++ RX : Uplink Control Block +++++++++++++++++++++++++
|
||||
------------------------- RX : Uplink Control Block -------------------------
|
||||
Got RACH from TLLI=0xf1223344 while TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=ASSIGN) still exists. Killing pending DL TBF
|
||||
TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=ASSIGN) free
|
||||
TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=ASSIGN) stopping timer 0.
|
||||
PDCH(TS 7, TRX 0): Detaching TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=ASSIGN), 0 TBFs, USFs = 00, TFIs = 00000000.
|
||||
Detaching TBF from MS object, TLLI = 0xf1223344, TBF = TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=ASSIGN)
|
||||
********** TBF ends here **********
|
||||
Got RACH from TLLI=0xf1223344 while TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=ASSIGN) still exists. Release pending DL TBF
|
||||
TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=ASSIGN) changes state from ASSIGN to WAIT RELEASE
|
||||
TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=WAIT RELEASE) restarting timer 3193 while old timer 0 pending
|
||||
MS requests UL TBF in packet resource request of single block, so we provide one:
|
||||
********** TBF starts here **********
|
||||
Allocating UL TBF: MS_CLASS=1
|
||||
|
|
Loading…
Reference in New Issue