Age | Commit message (Collapse) | Author | Files | Lines |
|
Description of algorithm:
1. Start with initial coding scheme.
2. Transmit RLC blocks until the end of the reporting window (Packet Downlink Ack/Nack message is received)
3. Estimate the average C/I for the previous reporting window and change CS, if it is necessary.
4. If there is more data to transmit return to step 2.
Added configuration options to enable/disable link adaptation and setting maximum C/I level for CS1, CS2, CS3, CS4.
|
|
The timing advance of any TBF is stored when it ends. Whenever a new TBF
with the same TLLI is created (downlink TBF), the stored TA is recalled.
This algorithm assumes that the mobile does not move too fast during
transfer. Also the mobile must start a connection in order to get correct
initial timing advance.
This algorithm does not implement the timing advance procedure as defined
in TS 04.60. To implement the standard timing advance procedure, the BTS
must decode RACH on certain bursts, the mobile is expected to send them.
This requires much more complexity to a transceiver like USRP/UmTRX or
Calypso BTS.
The algorithm was tested at TA >= 8 and works quite well.
|
|
The measurements include:
- DL bandwidth usage
- DL packet loss rate
- DL measurements by mobile
- UL measurements by BTS
In order to receive DL measurements from mobile, it must be enabled via
system information message at BSC.
|
|
This bumps the PCU API version to 5 and requires osmo-bts >= 0.2.0.
|
|
This simpliefies the allocation process.
tfi_alloc is responsible to allocate a TFI, not a time slot.
The first time slot available depends on multislot class and on other
ongoing TBF (concurrent TBFs), so it is part of the allocation
algorithm to select it.
|
|
|
|
The slots are choosen in a way that later selection of slots for
concurrent TBFs will have the same downlink/uplink control channel
(PACCH).
This is required for polling acknowledge of new TBF assignment on PACCH.
The MS will always have the same PACCH uplink slot while beeing in packet
transfer mode.
|
|
Some MS will leave packet transfer mode, if TAI is given, but no timing
advance control messages are sent on PTCCH. This could results in
permanent loss of larger packets.
|
|
This happens, if the mobile looses coverage and establishes a subsequent
uplink TBF.
|
|
It is essential to initialize the first_fin_ack variable.
Also it is essential not to free TBF, in case the final ack is not
received, but all frames have been acked. In this special case, we resend
the final block again and again (and poll), until we receive the final
ack.
|
|
|
|
It is quite essential. It shows how TBFs are related and helps to estimate
states and timers (timeouts) of the MS.
In order to use it, it must be defined by a switch at gprs_rlcmac.h.
|
|
Conflicts:
src/gprs_bssgp_pcu.cpp
src/gprs_rlcmac.cpp
src/gprs_rlcmac_data.cpp
src/gprs_rlcmac_sched.cpp
|
|
|
|
A new attribute at TBF instance indicates the current scheme used.
|
|
|
|
Since we don't know when the IMM.ASS message is sent on it's paging group
on PCH, we will wait for confirm from BTS and start packet flow then.
|
|
In this case the mobile has lost existing flows, so it make sense to free
them. The TFI(s) can be re-used immidiately, because they are not
associated by MS anymore.
|
|
The initial power control value Alpha must be set in SI13.
|
|
|
|
This is required, since we may change slot allocation. In case of a
change, we do not want to be unable to change, if the same TFI on one of
the other slots is already in use by a different TBF (having same TFI, but
on different slot).
|
|
It is mandatory to support it because MS may request a single block.
In this case the network must assign a single block.
It is possible to force single block allocation for all uplink requests
on RACH. (VTY option)
|
|
This is required, since the UL TBF which is used to assign downlink TBF
may be freed due to timeouts.
|
|
|
|
|
|
Both flags can be used to determine wether assignment must be sent on PCH
or on AGCH. Before contention resolution is done, mobile will ignore
downlink assinment. When final uplink acknowledge was sent, the mobile
will go back to PCH after reception of akcnowledge.
|
|
|
|
ressource -> resorce
|
|
|
|
In order to select correct channel (PCH or PACCH), a tbf pointer is set
in case of PACCH. The tbf pointer points to TBF whose PACCH is used.
|
|
If the mobile misses assignment, it changes back to idle mode. In this
case we must kill the pending downlink TBF, because it is not used by
mobile and we can assign a new downlink TBF for new downlink data.
(We may not have two downlink TBF with same TLLI!)
|
|
If the mobile is not fast enough switching back to CCCH, the second
assignment, which is sent later is usefull in this case.
|
|
Instead we use the event of sending assignment message. Then we set the
TBF state to 'FLOW'.
|
|
If lifetime expires of queued LLC frames, they are discarded. The number
of discarded frames and the sum of their octets are reported to SGSN
via LLC-DISCARDED message.
The lifetime can be overridden via VTY. The value can be centi-seconds
or "infinite".
|
|
|
|
This may happen, if Packer Downlink Assignment was not received by MS, so
old TBF with old sequence number is still alive. In this case we free TBF.
|
|
This lowers the risk for stalling of transmit window.
|
|
If network does not respond fast enough, the MS might already received
final Packet Uplink Ack/Nack, so we need to assign new DL TBF on PCH.
|
|
|
|
|
|
In order to do downlink assignment during uplink TBF, the content
resolution must be completed. It is completed when the first Packet
Uplink Ack/Nack message is transmitted to the mobile.
|
|
It turned out that the final ack flag may not be set, but all packets
have been acknowledged. This patch will finish transfer in case all
blocks are acknowledged.
|
|
The slot must be the control channel TS, which is selected by the
allocation algorithm. The MS must be able to respond at this TS.
The counter to trigger polling is incremented until polling has to be
performed. Then the counter stops. When the transmission of data block is
requested on control channel TS, the counter is reset. The counter-value
is also used to poll immediately when the transmission has finished.
|
|
In order to send control blocks to MS and receive control blocks from MS
(polling), it is required to select one timeslot that the MS must be
able to send and receive. The allocation algorithm must take care of
selecting that slot.
|
|
The current available algorithm only supports selecting a single slot
for downlink/uplink. (In the future, a multislot algorithm will follow.)
|
|
The new data structure is required to define slot/TFI assigment for MS
with multislot capability.
Now there are two lists for TBFs: uplink and downlink. It is possible to
have different TBFs with same TFI in the same direction, as long as they
are assigned on different timeslots.
See tbf.txt for description.
Note: This does not implement any multislot support. It defines the new
data structure. Currently only the first slot is assigned.
|
|
Merge is based on jolly_new branch with two modifications.
1. Modified PCU L1 interface.
pcu_l1_if.cpp - common functions for tx and rx messages on L1 interface.
sysmo_sock.cpp - SYSMO-PCU socket functions.
openbts_sock.cpp - OpenBTS-PCU socket functions.
pcuif_proto.h - L1 interface's primitives.
2. Modified encoding of RLC/MAC Control messages, now we use structures and encode_gsm_rlcmac_downlink() function for encode control blocks (without hand-coding).
|
|
The IMSI is used to define paging group on which it is sent.
This is tested with MS that requires correct paging group.
|
|
Only when using LOGL_DEBUG, every detailled information is displayed.
When using LOGL_INFO, a summary of the process is displayed.
When using LOGL_NOTICE, only errors and warnings like timeouts
or invalid received informations are displayed.
When using LOGL_ERROR, only local error like software errorss are
displayed.
|
|
The pseudo length may not include the rest-octets, so it stays compatible
to non-GPRS phones.
At pcu_l1_if.c (OpenBTS) no pseudo length is given, so the frame is
only 22 bytes long. I could not test if it works.
|